excel 列名称由数字转成字母格式,如何编程实现?
For example:
1 -> A
 2 -> B
 3 -> C
…
26->Z
27->AA
28->AB
 …
 52-> AZ
 53 -> BA
  
【数字转成字母】
方法①
思路:先用数组对象,下标1-26对应存储字符A-Z,.然后把excel列数字 看成二十六进制的数
二十六进制,11表示27,12表示28.然后从数组对象里查询到:1对应的是A,.2对应的是B.这样11改成AA,12改成AB。
测试反例:
52 的26进制应该是 20
 而excel中52列是AZ,与二十六进制结果不对应。尽管A*26^1+Z*26^0  与2*26^1+0*26^0是相等的。
;正确方法如下
getColName(i)
{
    arr:=[]
    j:=1
    while(i>0)
    {
        arr[j]:=Mod(i-1,26)
        i:=(i-arr[j])//26
        j:=j+1
    }
    alpha:="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    cha_arr:=StrSplit(alpha,"")
    for k,v in arr
        s:=cha_arr[v+1] . s  ;数组从1开始
    Return s
}
;再简化下
ColumnLetter(ColumnNumber)
{
    n := ColumnNumber
    While (n > 0)
	{
        c:=Mod((n-1),26)
        s:= Chr(c + 65)  .  s
        n:= (n-c) // 26
    }
    return s
}
ColumnNumberToLetter(iCol)
{
    If (iCol <= 26)
    {
        ColumnNumberToLetter := Chr(iCol + 64)
    }Else{
        lRemainder :=Mod( iCol,26)
        lAlpha := floor(iCol / 26)
        If (lRemainder = 0 )
        {
            lRemainder := 26
            lAlpha := lAlpha - 1
        }
        ColumnNumberToLetter := ColumnNumberToLetter(lAlpha) . Chr(lRemainder + 64)
    }
    return ColumnNumberToLetter
}vba版本:
Function ColumnLetter(ColumnNumber As Long) As String
    Dim n As Long
    Dim c As Byte
    Dim s As String
    n = ColumnNumber
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c + 65) & s
        n = (n - c) \ 26
    Loop While n > 0
    ColumnLetter = s
End Function
方法②
用excel内置函数也可以实现
Col_Letter(lngCol)
{
	oExcel :=   ComObjActive("Excel.Application")
	vArr:=[]
	vArr:= StrSplit(oExcel.Cells(1, lngCol).Address(True, False), "$")
	objRelease(oExcel)
	return % vArr[1]
}
vba版本:
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
测试用例:
MsgBox % Col_Letter(52) 	;AZ
MsgBox % Col_Letter(53) 	;BA
MsgBox % Col_Letter(702)    ;ZZ
MsgBox % Col_Letter(703)    ;AAA
【字母转成数】给定一个Excel表的列名,返回相应列的数字,很容易:
getColNum(InputVar)
{
    StringUpper, OutputVar, InputVar
    arr:=StrSplit(OutputVar,"")
    result:=0
    for k,v in arr
    {
        result := result * 26 + asc(v)-64
    }
    return result
}参考:
https://stackoverflow.com/questions/12796973/function-to-convert-column-number-to-letter










