精华内容
下载资源
问答
  • 列数字介绍
    千次阅读
    2021-07-24 03:58:33

    excel如何计算一列数字的总和?

    方法一:手动写公式,例如:单击某一单元格输入“=A1 A2 A3 A4.....”,然后回车。

    方法二:工具栏上有个“E”的按钮,点它就可以。

    EXCEL 怎么计算一列中的总和?

    excel一列的方法及步骤:

    打开Excel,假设表中的“12345要求和的数字,有以下几种方法求得和。

    1.  第一种方法:将所有的数字用框选中,在Excel表的最下栏将显示出求和的值等信息,如图所示。

    2.  第二种方法:直接点击“自动求和”功能按钮,回车键过后将直接在下面一栏显示求和值。

    3.  第三种方法:直接采取公式法,在下一栏中输入输=sum(A1:A5),然后回车键即可。

    拓展资料:

    Excel 是 Microsoft Office system [2]中的电子表格程序。您可以使用 Excel 创建工作簿(电子表格集合)并设置工作簿格式,以便分析数据和做出更明智的业务决策。特别是,您可以使用 Excel 跟踪数据,生成数据分析模型,编写公式以对数据进行计算,以多种方式透视数据,并以各种具有专业外观的图表来显示数据。

    简而言之:Excel是用来更方便处理数据的办公软件。

    EXCEL求和函数公式

    操作方法如下:

    1先,一些小的可以运用计算机或者算出来,但是在办公遇到的通常是比较大的数值,这个时候恰当的运用excell自动求和可以减少工作量,提高工作效率;

    2、然后,在单元格k1中输入=sum()函数;

    3、第三步,将a1到h1的数据选中,或者直接输入=sum(a1:j1)也可以;

    4、最后在上面的文本框中也可以查看刚才输入的函数,然后点击电脑桌面上的enter键完成计算。

    扩展资料:

    在我们运用Excel做各种数据表的时候,求和函数、最大值、最小值等函数的运用可以最大限度的为我们节约时间,提高效率!各种函数如何使用值得我们去挖掘和练习。

    excel求和公式

    1、首先们需要进行打开EXCEL表。

    2、我们需要在表入随机数。

    3时,使用鼠标帧来计算数据,要再点击几次。

    4、点击工具栏中的自动合计是非常重要的。

    5、最后,我们可以看到我们总结了它。

    注意事项:

    在EXCEL工作表中可以用SUM函数或“ ”符号进行求和运算。

    如:=A1 A2 A3 B1 B2 B3用SUM函数可以写成:=SUM(A1:B3)

    更多相关内容
  • 2.分别新建两列,一列为文字,一列为数字列; 3.将要分割的,分别在新第一行中写出文字部分和数字部分; 4.然后像复制操作一样,选中其中的一,双击其右下角,这样这一所有的字符都复制的第一行,之后...
  • 下面通过16、17来介绍常用的几种单片A/D转换器和几种常用的单片数字万用表集成电路。 16中以ICL7106、ICl707使用的最为普遍,它是将双积分式转换器、七段译码、显示驱动、基准源、时钟等电路郡集成在同一块...
  • 取一个包含字母的字符串参数,并找出它在 Excel 中对应的号。 仅对该函数进行了简短的错误检查。
  • Python Excel表格数的字母表达与数字的相互转换

    千次阅读 多人点赞 2021-08-19 09:23:38
    Excel表格的数用字母表达式:A,B,C,...,Y,Z,AA,AB,AC,....来表示的,就称它为“数”。 它的本质就是整数的二十六进制记数,但又有些不一样:若把A看作0,Z之后是AA相当于是“00”,这就是和普通进位制不同的...

    Excel表格的列数用字母:A,B,C,...,Y,Z,AA,AB,AC,....来表示的,就称它为“列数”。

    它的本质就是整数的二十六进制记数,但又有些不一样:若把A看作0,Z之后是AA相当于是“00”,这就是和普通进位制不同的地方。

    与普通数制转换的差异

    使用内置函数int(x, base=10)转换,把基权设置为26和36进行测试:

    >>> int('A',base=26)-int('9',base=26)
    1
    >>> int('AA',base=26)-int('99',base=26)
    27
    >>> int('AAA',base=26)-int('999',base=26)
    703
    >>> int('P',base=26)-int('9',base=26)
    16
    >>> int('Q',base=26)-int('9',base=26)
    Traceback (most recent call last):
      File "<pyshell#194>", line 1, in <module>
        int('Q',base=26)-int('9',base=26)
    ValueError: invalid literal for int() with base 26: 'Q'
    >>> int('Q',base=36)-9
    17
    >>> int('Z',base=36)-9
    26

    普通数制转换从0开始的,10进制以上的数字9以后才用到字母ABC...来代表各位上的数字;而“列数”的表达是从A开始的没有0~9。通过上面的测试规律可知,对“列数”中出现的字母,分段A~P和Q~Z各用26进制和36进制转换,然后乘以各自的位权后累加即可得到结果:

    >>> def A2N(s:str)->int:
    	ret = 0
    	if s[0]>'P': t = int(s[0],base=36)-9
    	else: t = int(s[0],base=26)-int('9',base=26)
    	ret += t*26**(len(s)-1)
    	s = s[1:]
    	if s: ret += A2N(s)
    	return ret
    
    >>> A2N('A')
    1
    >>> A2N('AA')
    27
    >>> A2N('ZY')
    701
    >>> A2N('ZZ')
    702
    >>> A2N('AAA')
    703
    >>> A2N('ZZZ')
    18278
    >>> 

    上面这个代码有个好处, 不区分字母大小写,这是因为int()自带的就这样的。以下内容中所有字符串转整数类的函数,如果也要支持小字字母,只需在函数首行位置添加 s=s.upper() 即可实现。 
     

    Excel "列数"转成整数

    如果不使用现成的int()函数,就按权展开求和,这也是非十进制转化十进制的普遍方法。以下代码的主体就一个return语句,我把按位展开用了一个推导式来完成:

    >>> def Col2Int(s:str)->int:
        assert(isinstance(s, str))
        for i in s:
            if not 64<ord(i)<91:
                raise ValueError('Excel Column ValueError')
        return sum([(ord(n)-64)*26**i for i,n in enumerate(list(s)[::-1])])
    
    >>> Col2Int('A')
    1
    >>> Col2Int('Z')
    26
    >>> Col2Int('AA')
    27
    >>> Col2Int('ZZ')
    702
    >>> Col2Int('ZJX')
    17860
    >>> Col2Int('ZZZ')
    18278
    >>> 26*26**2+26*26+26
    18278
    >>> Col2Int('ABCD')
    19010
    >>> 1*26**3+2*26**2+3*26**1+4*26**0
    19010
    >>> 

    整数转换成“列数”

    反过来整数转非十进制数的普遍方法是反复“除权求余”获取各位上的数字,先建一个字母列表 ['A', 'B', 'C', ...., 'Z'] 用于映射各位上的“数字”:

    >>> def ExcelColumn(n:int)->str:
        assert(isinstance(n, int) and n>0)
        num = [chr(i) for i in range(65,91)]
        ret = []
        while n>0:
            n,m = divmod(n-1, len(num))
            ret.append(num[m])
        return ''.join(ret[::-1])
    
    >>> ExcelColumn(703)
    'AAA'
    >>> ExcelColumn(26**2+26+1)
    'AAA'
    >>> ExcelColumn(5*26**4+4*26**3+3*26**2+2*26**1+1*26**0)
    'EDCBA'
    >>> 5*26**4+4*26**3+3*26**2+2*26**1+1*26**0
    2357265
    >>> ExcelColumn(2357265)
    'EDCBA'
    >>> 

    或者不建列表,各位分别转换;和上段代码一样其中的 (n-1) 非常关键,原因是“列数”中没有“零”而是从“一”开始的,同样没有“10”直接从“Z”跳到“AA”:

    >>> def num2chr(n:int)->str:
    	ret = ''
    	while n//26:
    		n,m = divmod(n-1,26)
    		ret += chr(65+m)
    	if n: ret += chr(65+n-1)
    	return ret[::-1]

    递归法实现转换

    >>> def ExcelColumn(n:int)->str:
    	num = [chr(i) for i in range(65,91)]
    	ret,(n,m) = '',divmod(n-1,26)
    	if n: ret += ExcelColumn(n)
    	ret += num[m]
    	return ret
    
    >>> ExcelColumn(1)
    'A'
    >>> ExcelColumn(26)
    'Z'
    >>> ExcelColumn(27)
    'AA'
    >>> ExcelColumn(702)
    'ZZ'
    >>> ExcelColumn(703)
    'AAA'
    >>> 
    >>> 
    >>> def Col2Int(s:str)->int:
    	ret=0
    	ret += (ord(s[0])-64)*26**(len(s)-1)
    	s = s[1:]
    	if s: ret += Col2Int(s)
    	return ret
    
    >>> Col2Int('Z')
    26
    >>> Col2Int('AA')
    27
    >>> Col2Int('XFD')
    16384
    >>> Col2Int('ILOVEYOU')
    76181660199
    >>> Col2Int('HANNYANG')
    64736574559
    >>> 

    用第三方库函数转换

    需要安装openpyxl库,另外它限制了“列数”最大值为三位字母,实际上 Excel2007+ 的列数最大值是16384 (是XFD并非ZZZ),而EXCEL2003等老版本的最大列数只有256。

    >>> from openpyxl.utils import get_column_letter as ExcelColumn
    >>> from openpyxl.utils import column_index_from_string as Col2Int
    >>> 
    >>> ExcelColumn(18278)
    'ZZZ'
    >>> ExcelColumn(17376)
    'YRH'
    >>> 
    >>> Col2Int('XFD')
    16384
    >>> Col2Int('ZZZ')
    18278
    >>> Col2Int('AAAA')
    Traceback (most recent call last):
      File "D:\Python38-32\lib\site-packages\openpyxl\utils\cell.py", line 121, in column_index_from_string
        return _COL_STRING_CACHE[str_col.upper()]
    KeyError: 'AAAA'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<pyshell#127>", line 1, in <module>
        Col2Int('AAAA')
      File "D:\Python38-32\lib\site-packages\openpyxl\utils\cell.py", line 123, in column_index_from_string
        raise ValueError("{0} is not a valid column name".format(str_col))
    ValueError: AAAA is not a valid column name
    >>> 

    leetcode题号168和171

    Excel Sheet Column Title
    Given a positive integer, return its corresponding column title as appear in an Excel sheet.    [#168]

    Excel Sheet Column Number
    Given a column title as appear in an Excel sheet, return its corresponding column number.     [#171]

    本篇完,方便的话请点个赞再走^_^


    学习交流 Python 的群和公众号:

    欢迎关注公众号

     http://qr01.cn/FHYKEa

    展开全文
  • 默认情况下,输入中的所有数字列都被平均,平均值、标准偏差 (SD) 和样本数 (N) 作为三个新行附加到输出中。 非数字列保持原样,新行获得 row1 中值的副本。 可选的行索引列表输入可用于仅计算特定行。 SD 和 N...
  • 随机数字表

    千次阅读 2021-07-29 08:19:40
    《随机数字表法》由会员分享,可在线阅读,更多相关《随机数字表法(3页珍藏版)》请在人人文库网上搜索。1、一)两个处理比较的分组【例12.1】 现有同品种、同性别、同年龄、体重相近的健康绵羊18只,试用完全随机的...

    《随机数字表法》由会员分享,可在线阅读,更多相关《随机数字表法(3页珍藏版)》请在人人文库网上搜索。

    1、一)两个处理比较的分组【例12.1】 现有同品种、同性别、同年龄、体重相近的健康绵羊18只,试用完全随机的方法分成甲、乙两组。绵羊编号123456789101112131415161718随机数字组别调整组别16乙07甲44乙99甲83甲11甲46乙甲32乙24乙甲20乙14乙85甲88乙45甲10乙93甲72乙88乙首先将18只绵羊依次编为1,2,18号,然后从随机数字表中任意一个随机数字开始,向任一方向(左、右、上、下)连续抄下18个(两位)数字,分别代表18只绵羊。令随机数字中的单数为甲组,双数为乙组。如从随机数字表()第12行第7列的16开始向右连续抄下18个随机数字填入表第二行。随机。

    2、分组结果:甲组:2456121416乙组:1378 9101113151718甲组比乙组少4只,需要从乙组调整两只到甲组。仍用随机的方法进行调整。在前面18个随机数字后再接着抄下两个数字:71、23,分别除以11(调整时乙组的绵羊只数)、10(调整1只绵羊去甲组后乙组剩余的绵羊只数),余数为5、3,则把分配于乙组的第5只绵羊(9号)和余下10只的第3只绵羊(7号)分到甲组。调整后的甲、乙两组绵羊编号为:甲组245679121416乙组138101113151718下表就是一个随机号码表:034743738636964736614698637162977424676242811457204253。

    3、323732167602276656502671073290797853125685992696966827310503729315555956356438548246223162430990162277943949544354821737932378844217533157245506887704744767630163785916955567199810507175332112342978645607825242074428576086324409472796544917460962181807924644171658097983861962266238977584160744998311。

    4、463224234240547482977777810745321408623628199550922611970056763138378594351283395008304234079688702917121340332038261389510374566218373596835087759712259347994957227788429545721664361600160815047233271434094559346849311693324350278987192015370049根据数理统计学的最少样本法则 可以得出 nk+1 (k为解释变量的个数,n为样本数)。 2、 如果要有效估计。

    5、参数 可以根据有效样本得出 n30或者n3*(k+1)。 只看你要多大的精度 如果精度随着样本数的增加而增加 。变量:年龄、体重、营养状况、血压、快速准确地采集患者的动脉血气分析标本, 将直接影响到疾病的诊断、治疗和护理。方法步骤折叠编辑本段Allen试验方法步骤:术者用双手同时按压桡动脉和尺动脉;嘱患者反复用力握拳和张开手指57次至手掌变白;松开对尺动脉的压迫,继续保持压迫桡动脉,观察手掌颜色变化。若手掌颜色10s之内迅速变红或恢复正常,表明尺动脉和桡动脉间存在良好的侧支循环,即Allen试验阴性,可以经桡动脉进行介入治疗,一旦桡动脉发生闭塞也不会出现缺血;相反,若10s手掌颜色仍为苍白,Allen试验阳性,这表明手掌侧支循环不良,不应选择桡动脉行介入治疗。

    展开全文
  • Java poi Excel xls数字转字母

    千次阅读 2016-12-02 16:24:42
    最近遇到导出的xls中 是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用字母来表示的,这时需要把数字号转成该对应的字母。因为是按月导出 一个月最多31天,所以刚开始采用的办法是...

    最近遇到导出的xls中 列是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用列字母来表示的,这时需要把数字的列号转成该列对应的字母。因为是按月导出 一个月最多31天,所以刚开始采用的办法是定义一个包含1到31列字母的数组。后来想想这样总不是个办法 万一列数更多 且是不确定的呢。于是研究了下 怎么把xls数字列号转成对应的字母。

    先来看xlsx中的字母规律。在xls中,1到26列是A~Z,从第27列开始 是2个以上的字母组合 AA AB ... AZ 然后到BA BB ... BZ 直到 ZA ZB ... ZZ 这时两个字母的组合完了 接下来到3个字母 AAA AAB ... AAZ 然后到ABA ABB ... ABZ 一直到AZZ 然后是BAA BAB ... BZZ最后到ZAA ... ZZZ,接下来又是4个字母的组合如此循环...  。

    于是发现了规律: AA~AZ是在A~Z前面加了A,BA~BZ是在A~Z前面加了B,... ZA~ZZ是在A~Z前面加了Z,这时两个字母组合完毕;到3个字母 AAA~AAZ是在AA~AZ前面加了A,ABA~ABZ是在BA~BZ前面加了A,... AZA~AZZ是在ZA~ZZ前面加了A,这时AA~ZZ遍历完了一次(这里的AA~ZZ是前面两个字母组合里出现过的);接下来到下一轮遍历 在前面加B,BAA~BAZ是在AA~AZ前面加了B,... BZA~BZZ是在ZA~ZZ前面加了B,这时AA~ZZ又遍历完了一次;再进行下一轮遍历 一直到在所有两个字母的组合前都加过A~Z,这时3个字母的组合就全部组合完毕了。接下来到4个字母的组合 跟前面的2个、3个字母的组合类似,都是在上一个组合的基础上分别在前面加上A~Z。如下图


    字母组合是从第27列开始,每次的组合都是在上一个组合的基础上分别在前面加上A~Z。比如计算n=3个字母的组合AAA~ZZZ(上图红色竖线箭头部分):2个字母组合所在的范围是AA~ZZ(上图红色的“currentLen”部分),当前数组的位置(比如AAB)i与currentLen进行取余运算(i%currentLen)得到的结果就是要与2个字母组合的哪个种组合进行字符串拼接(该值还要与“lastLen”(上图红色lastLen)相加才能定位到该位置对应的字母),比如当前是第一轮遍历 则是A与AB进行拼接成AAB,这也就是上面举例的当前数组位置对应的字母(AAB)。假设我们用变量letterIdx表示第几轮,每上个组合遍历完一次letterIdx都要+1,表示下一个要拼接在前面的字母。因为拼接在前面的字母是A~Z 所以每次取该轮字母时都要跟26取余(letterIdx%26),当letterIdx%26=0时 说明A~Z都与上个组合拼接过了 也就是当前n个字母组合所有情况都组合过了,再进行下一轮n+1个(4个)字母的组合(上图黑色竖线箭头部分),这时currentLen变成了上一个组合的长度(上图黑色的currentLen),而lastLen变成了“上个组合的currentLen+lastLen”(上图黑色的lastLen部分),接下来的循环遍历跟上个组合一样进行。

    上代码:(代码里的注释请结合上文来看,注释里说到的“组合的情形”是指该组合的某一种组合,如BK、AH、XI都是2个字母组合的一种情形。因为实在也不知道应该用哪个词来表达)

    public final class Columns {
    
    	private Columns() {}
    
    	private static String[] sources = new String[]{
    		"A","B","C","D","E","F","G","H",
    		"I","J","K","L","M","N","O","P",
    		"Q","R","S","T","U","V","W","X","Y","Z"
    	};
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * @param columnNum 列的个数,至少要为1
    	 * @throws IllegalArgumentException 如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if(columnNum<1||columnNum>16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if(columnNum<27){	//小于27列 不用组合
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}		
    		System.arraycopy(sources, 0, columns, 0, 26);	//前26列不需要进行组合
    
    		//因为基于数组是从0开始,每到新一轮letterIdx 会递增,所以第一轮 在递增前是-1
    		int letterIdx = -1;
    		int currentLen = 26;//第一轮组合(2个字母的组合)是分别与A-Z进行拼接 所以是26
    		int remainder;
    		int lastLen = 0;	//用于定位上文提到的i%currentLen实际在数组中的位置		
    		int totalLen = 26;	//totalLen=currentLen+lastLen
    		int currentLoopIdx = 0; //用来记录当前组合所有情形的个数
    
    		for(int i=26;i<columnNum;i++){ //第27列(对应数组的第26个位置)开始组合
    
    	//currentLen是上个组合所有情形的个数,与它取余找到要与上个组合的哪种情形进行拼接
    			remainder = currentLoopIdx%currentLen;
    
    			if(remainder==0){
    				letterIdx++; //完成一次上个组合的遍历,转到下个字母进行拼接
    				int j = letterIdx%26;
    
    			//A-Z 26个子母都与上个组合所有情形都进行过拼接了,需要进行下个组合的拼接
    				if(j==0&&letterIdx!=0){ 
    					lastLen = totalLen; //下个组合的lastLen是上个组合的totalLen
    
    				/**
    	 		     * 下个组合的currentLen是上个组合的所有组合情形的个数
    	 		     * (等于上个组合的currentLen*26),26也就是拼接在前面的A-Z的个数
    	 		     */			 
    					currentLen = 26*currentLen;
    
    					totalLen = currentLen+lastLen; //为下一轮的开始做准备
    					currentLoopIdx = 0; //到下一轮了 因此需要重置
    				}
    			}
    			/**
    	 	     * sources[letterIdx%26]是该轮要拼接在前面的字母
    	 	     * columns[remainder+lastLen]是上个组合被拼接的情形
    	 	     */		
    			columns[i] = sources[letterIdx%26]+columns[remainder+lastLen];
    			currentLoopIdx++;
    		}
    		return columns;
    	}
    }
    测试:
    public static void main(String[] args) {
    	String[] columns = getColumnLabels(37 );
    	System.out.println("1到37列:"+Arrays.toString(columns));
    	System.out.println();
    	long start = System.nanoTime();
    	columns = getColumnLabels(256);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    	System.out.println();
    	start = System.nanoTime();
    	columns = getColumnLabels(16384);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xlsx第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    }

    打印:
    1到37列:[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, 
    U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK]
    
    创建256列用时(纳秒):192833
    xls第256列:IV
    
    创建16384列用时(纳秒):9574147
    xlsx第16384列:XFD

    ------------------------------------------------------分隔线-----------------------------------------------------------------

    后来有想到,如果是不需要(或者条件不允许)提前创建(这么大的)数组呢,这时需要通过列号直接获取该列对应的字母。于是又想 应该怎么转换。。。
    先看看从字母转数字的,比如BGQCV 转成数字(虽然xlsx最后一列是XFD,这里只讨论数字与字母的互转):该列标有5个字母,说明前面已经有4个字母、3、2、1个字母的全组合了 才会到5个字母的组合,于是W1=26^4+26^3+26^2+26^1,BGQCV 的第一个字母是B,说明前面有Axxxx的全组合了,于是有该组合数T1=1*(26^4)。再来看第二个字母是G,说明前面已经有BAxxx~BFxxx的全组合了,于是有该组合数T2=6*(26^3)。第三个字母是Q,说明前面已经有BGAxx~BGPxx的全组合了,于是有该组合数T3=16*(26^2)。第四个字母是C,说明前面已有BGQAx~BGQBx的全组合了,该组合数T4=2*(26^1)。最后一个字母是V,说明前缀是BGQC的组合BGQCA~BGQCV共有T5=22个。
    好了,BGQCV 所处的列数W=W1+T1+T2+T3+T4+T5=(26^4+26^3+26^2+26^1)+1*(26^4)+6*(26^3)+16*(26^2)+2*(26^1)+22 = 1048576。
    String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    数组sources作为我们解决问题的字母来源(当然也可以不定义数组而是用ASCII码)。
    现在知道了通过字母列标是如何求出其对应的第几列,我们把问题一般化:求第W列对应的列标。设第W列对应的字母有n个,根据上面的分析可知W1=26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1。我们规定A对应1,B对应2 ... Z对应26。设第1个字母对应数字是num_1,第二个字母对应的数字是num_2,...,第n个字母对应数字num_n。根据上面的分析 于是有T1=(num_1-1)*26^(n-1),T2=(num_2-1)*26^(n-2),...,Tn=(num_n-1)*26^0。
    整合起来,又因为26^0=1 于是有W=W1+T1+T2+...+Tn=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1+(num_n-1)。
    除了最右边的字母(也就是第n个字母)对应的位置的数字num_n-1除外,其它字母对应的位置的数字均是26的倍数。于是  第一次W对26取余W%26的结果所对应的字母(还记得吗 我们用1代表A,2代表B,... ,26代表Z)就是最右边的字母。好了 现在已经求出了最右边的字母,还剩n-1个未知字母,采用同样的办法可求出次右边的字母:W-(num_n-1)然后再除以26,得到的结果再减去1(因为W1中存在26^1,其除以26后结果就是1,为了保证除了次右边字母对应的位置的数字外,其余各字母对应的位置的数字均是26的倍数),把结果赋回给W,这时求次右边的字母就跟求最右边的字母类似了:
    W-(num_n-1)=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1
    然后两边除以26:(W-(num_n-1))/26=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1+1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后两边再减去1:(W-(num_n-1))/26-1=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后把左边的(W-(num_n-1))/26-1看成整体的W,是不是跟最开始求最右边字母的很类似?
    这样从右往左求出来的字符串 跟所要的结果恰好是相反的 所要需要反转。
    上代码:
    /**
     * 返回该列号对应的字母
     * @param columnNo (xls的)第几列(从1开始)
     */
    public static String getCorrespondingLabel(int columnNo){
    	if(columnNo<1/**||columnNo>16384**/)
    		throw new IllegalArgumentException();
    	String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M"
    		,"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    	StringBuilder sb = new StringBuilder(5);
    	int remainder = columnNo%26;	//求最右边的字母
    	if(remainder==0){	//说明(num_n-1)=26,第26个字母是Z
    		sb.append("Z");
    		remainder = 26;	//因为接下来W-(num_n-1)也就是columnNo-remainder,所以需要把remainder赋值回26
    	}
    	else{  //如果最右边字母不是Z的话,就去sources数组相应的位置取字母,remainder不用变
    	  sb.append(sources[remainder-1]);
    	}
    	columnNo = (columnNo-remainder)/26-1;	//用来判断接下来是否还有其他字母
    
    	//当 当前循环是求最后一个字母时(从右往左),(columnNo-remainder)/26就会是0,再减1也就是-1。
    	//因此通过判断(columnNo-remainder)/26-1是否大于-1来判断结束
    	while(columnNo>-1){
    		remainder = columnNo%26;
    		sb.append(sources[remainder]);
    		columnNo = (columnNo-remainder)/26-1;
    	}
    
    	return sb.reverse().toString();	//因为是从右往左解析的 所以需要反转
    }


    测试:
    public static void main(String[] args) {
    	String label = getCorrespondingLabel(37 );
    	System.out.println("第37列:"+label);
    	System.out.println();
    	long start = System.nanoTime();
    	label = getCorrespondingLabel(256);
    	System.out.println("查找第256列对应字母 用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第256列:"+label);
    	System.out.println();
    	
    	label = getCorrespondingLabel(16384);
    	
    	System.out.println("xlsx第16384列:"+label);
    }
    打印:
    第37列:AK
    
    查找第256列对应字母 用时(纳秒):7776
    xls第256列:IV
    
    xlsx第16384列:XFD
    这时又想到,求n列列标 用方法1好一点呢 还是用方法2循环n次好呢。。。
    方法1求数组的 对于26+26*26=702列以下,可以将求组合部分抽出来,减少不必要的求余运算multiple%26,因为这时multiple不会超过26。方法2也可以改成从0开始的 毕竟poi列数是从0开始的。不预定义字母数组的话 也可以用ASCII码来转换。
    -----------------------------------------------分隔线-----------------------------------------------------

    最终代码:

    /**
     * 
     * Excel列号转字母工具类
     * 
     */
    public final class Columns {
    
    	private Columns() {
    	}
    
    	private static String[] sources = new String[] { "A", "B", "C", "D", "E",
    			"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    			"S", "T", "U", "V", "W", "X", "Y", "Z" };
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * 
    	 * @param columnNum
    	 *            列的个数,从1开始
    	 * @throws IllegalArgumentException
    	 *             如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if (columnNum < 1 || columnNum > 16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if (columnNum < 27) {
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}
    		int multiple = -1;
    		int remainder;
    		System.arraycopy(sources, 0, columns, 0, 26);
    		int currentLoopIdx = 0;
    		if (columnNum < 703) {
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % 26;
    				if (remainder == 0) {
    					multiple++;
    				}
    				columns[i] = sources[multiple] + columns[remainder];
    				currentLoopIdx++;
    			}
    		} else {
    			int currentLen = 26;
    			int totalLen = 26;
    			int lastLen = 0;
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % currentLen;
    				if (remainder == 0) {
    					multiple++;
    					int j = multiple % 26;
    					if (j == 0 && multiple != 0) {
    						lastLen = totalLen;
    						currentLen = 26 * currentLen;
    						totalLen = currentLen + lastLen;
    						currentLoopIdx = 0;
    					}
    				}
    				columns[i] = sources[multiple % 26]
    						+ columns[remainder + lastLen];
    				currentLoopIdx++;
    			}
    		}
    
    		return columns;
    	}
    
    	/**
    	 * 返回该列号对应的字母
    	 * 
    	 * @param columnNo
    	 *            (xls的)第几列(从1开始)
    	 */
    	private static String getCorrespondingLabel(int columnNo) {
    		if (columnNo < 1/** ||columnNo>16384 **/
    		)
    			throw new IllegalArgumentException();
    
    		StringBuilder sb = new StringBuilder(5);
    		int remainder = columnNo % 26;
    		if (remainder == 0) {
    			sb.append("Z");
    			remainder = 26;
    		} else {
    			sb.append(sources[remainder - 1]);
    		}
    
    		while ((columnNo = (columnNo - remainder) / 26 - 1) > -1) {
    			remainder = columnNo % 26;
    			sb.append(sources[remainder]);
    		}
    
    		return sb.reverse().toString();
    	}
    
    	/**
    	 * 列号转字母
    	 * 
    	 * @param columnIndex
    	 *            poi里xls的列号(从0开始)
    	 * @throws IllegalArgumentException
    	 *             if columnIndex less than 0
    	 * @return 该列对应的字母
    	 */
    	public static String getIndexLabel(int columnIndex) {
    		return getCorrespondingLabel(columnIndex + 1);
    	}
    
    }
    展开全文
  • 将excel中的字母改为数字

    千次阅读 2020-04-26 21:16:45
    也就是在openpyxl的编程中,是用数字表示的,而不是用字母。我要处理的这个excel有上百,用字母表示不合适,毕竟不能一个一个从左到右去数。所以我需要把表示数的字母变成数字,方法如下: 1、 点击Excel ...
  • 今天学医的一个同学发消息说他那大量的Excel的数据想按照数字和汉字那一数据进行排序,但是不知道怎么操作,于是我就自己给他制作了了比较粗糙的操作教程,希望能够帮助到需要帮助的人吧。也欢迎有较好的方法的...
  • 举例子,列数字,作比较,打比方,这几个说明方法的例句2018-09-19推荐内容点击登录举例子,列数字,作比较,打比方,这几个说明方法的例句来自 Clarence 的提问最佳答案由提问者推荐常见的说明方法有举事例、分类别...
  • 1、打开电脑找到并双击打开excel2016版软2、双击打开excel表格以后,为范先在A编辑好任意的数字内容;3、编辑好以后,此时先在任意单元格内输入需要相乘的数字2,在鼠标右键选择复制命令;4、复制好以后,在选中A...
  • python表格的字母与数字相互转换

    千次阅读 2021-03-11 17:35:32
    xlsx表格最大行最大 其实就是.max_row和.max_column 直接上代码,一眼就看懂! from openpyxl.utils import get_column_letter from openpyxl.utils import column_index_from_string print(get_column_letter(5))...
  • 使用map的方法就可以实现把某一的字符类型的值转换为数字 首先定义一个字典,然后使用map方法就可以把某一的字符类型的值转换为数字。 class_mapping = {'A':0, 'B':1} data[class] = data[class].map(class_...
  • 这样字母就全部改为数字。 这时R1C1引用同原来的$A$1绝对引用。 普通相对引用是相对当前单元格而言,比如当前单元格是R2C11,公式里面出现的相对引用单元格RC[-1],表示当前行,左移一位的单元格,即单元格R2C10...
  • 使用 Mysql 的 sum 函数 ...获取指定(或者所有)的数据条数 使用 count 函数 SELECT COUNT(列名,为 * 则代表所有) FROM ; 同样也可以加条件 SELECT COUNT(列名,为 * 则代表所有) FROM WHERE 条件; ...
  • Oracle_判断某个值是否为纯数字

    千次阅读 2019-11-18 09:08:14
    oracle中有个regexp_like函数,可以通过正则表达式的规则来匹配纯数字项。 但是这个函数不是所有版本的oracle都具有的,如果在没有该函数的oracle版本中,可以使用trim+translate来匹配。 目录 1.regexp_like 2....
  • SQL更新一为递增数字的处理方法

    千次阅读 2020-03-03 16:20:11
    设计table1中一ID递增,但在插入数据过程中出现数据排列不规范,将ID更新为递增,方法如下: 1、取消ID的主键和递增标识 2、把数据提取到临时 select identity(int,1,1) as tid, ID into #临时表名 from 原...
  • Mac下sublime text3模式下插入顺序数字编号 相信大家在工作工程中会遇到在操作在某段文本时,需要批量操作同一多行数据时,需要在每行相同的位置添加类同的内容,煞是费时。 接下来我们要介绍多数文档编辑器...
  • *8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和。编写一个测试程序,读取3*4矩阵,显示每列元素的和题目题目描述与运行示例破题代码 题目 题目描述与运行示例 8.1(求...
  • Excel 里面如何在一列数字后面加符号或者单位 应用点在:给数组批量加分号,方便后续MATLAB处理
  • 在职场EXCEL统计中,如果我们将一串...这种格式也比较简洁,那么如何在单元格一列数字中添加两个空格呢,有三种方法方法1:智能填充法,适合2013以上版本智能填充,顾名思义,就是系统自动判断操作的意图,而后进行...
  • PostgreSQL增加一或删除一

    千次阅读 2021-09-06 18:11:26
    先创建一个student,后面例子以student为样例: CREATE TABLE students( ...ALTER TABLE 命令用于添加,修改,删除一张已经存在 语法 用 ALTER TABLE 在一张已存在的上添加的语法如下: A
  • 在数据中添加或删除一

    千次阅读 2021-02-02 06:04:06
    注意:我们希望能够尽快以你的语言为你提供最新的帮助内容。 本页面是自动翻译的,可能包含语法... 你可以使用数据视图来添加或删除,并设置这些的数据类型。 此外,你还可以通过任务窗格添加字段,或者打开数...
  • 怎么查看oracle的数据类型

    千次阅读 2021-05-01 04:18:26
    1、看字段名与数据类型select * from cols WHERE TABLE_name=upper('... (user_tab_columns缩写cols)2、查看全部select * from user_tab_columns where table_name = upper(‘表名’);3、查看某些select colum...
  • 点击偏好设置。 点击或者取消"使用RICI引用样式"。
  • 请问使用MySQL,如何在其中一自动填上递增的数字? 例如将中id的值,修改为递增序号。 要求一步到位,不需要手动逐行进行修改。 效果如图: ![图片说明]...
  • 在vba中,对单元格进行操作,经常需要知道单元格所在的行或.可用以下方法获取: 一、单元格的行标和标 set C=range("A1") c.row 得行号, c.column 得号 二、号转字母 ‘将1,2,3,....转为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 617,922
精华内容 247,168
热门标签
关键字:

列数字介绍