将数字转换为相应的Excel列

我需要一些帮助来做一个逻辑,将数值转换为相应的MS Excel标题值。

例如:

1 =“A”2 =“B”3 =“C”4 =“D”5 =“E”……… 25 =“Y”26 =“Z”27 =“AA”28 =“AB”29 =“AC”30 =“AD”………

希望一些.NET代码(C#或VB)为此。 谢谢。

这里有一些VBA(带有testing代码),我把它们串联在一起,就可以实现。 除非VB.NET大幅改变,否则应该可以。 即使有,你也应该能够把这个想法转换成可行的代码。

' num2col - translate Excel column number (1-n) into column string ("A"-"ZZ"). ' Function num2col(num As Integer) As String ' Subtract one to make modulo/divide cleaner. ' num = num - 1 ' Select return value based on invalid/one-char/two-char input. ' If num < 0 Or num >= 27 * 26 Then ' Return special sentinel value if out of range. ' num2col = "-" Else ' Single char, just get the letter. ' If num < 26 Then num2col = Chr(num + 65) Else ' Double char, get letters based on integer divide and modulus. ' num2col = Chr(num \ 26 + 64) + Chr(num Mod 26 + 65) End If End If End Function 

 ' Test code in Excel VBA. ' Sub main() MsgBox ("- should be " & num2col(0)) MsgBox ("A should be " & num2col(1)) MsgBox ("B should be " & num2col(2)) MsgBox ("Z should be " & num2col(26)) MsgBox ("AA should be " & num2col(27)) MsgBox ("AB should be " & num2col(28)) MsgBox ("AY should be " & num2col(51)) MsgBox ("AZ should be " & num2col(52)) MsgBox ("BA should be " & num2col(53)) MsgBox ("ZY should be " & num2col(27 * 26 - 1)) MsgBox ("ZZ should be " & num2col(27 * 26)) MsgBox ("- should be " & num2col(27 * 26 + 1)) End Sub 
 public string ColumnNumberToLetter(int ColumnNumber) { if (ColumnNumber > 26) { return ((char) (Math.Floor(((double)ColumnNumber - 1) / 26) + 64)).ToString() + ((char) (((ColumnNumber - 1) % 26) + 65)).ToString(); } return ((char)(ColumnNumber+64)).ToString(); } 

尝试这个:

 public static string ToExcelString(int number) { if (number > 25) { int secondaryCounter = 0; while (number > 25) { secondaryCounter = secondaryCounter + 1; number = number - 25; } return ToExcelChar(number) + ToExcelChar(secondaryCounter); } else { return ToExcelChar(number) } } private const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static string ToExcelChar(int number) { if (number > 25 || number < 0) { throw new InvalidArgumentException("the number passed in (" + number + ") must be between the range 0-25"); } return alphabet[number]; } 

使用数字库转换例程。 你想从基数10转换为基数26.将每个数字添加到“A”

如: http : //www.vbforums.com/showthread.php?t = 271359

只需使用activecell.address,然后根据$所在的位置根据需要操纵string。

Interesting Posts