将数字转换为相应的Excel列

时间:2009-08-13 03:34:09

标签: excel vsto numbers letter

我需要一些帮助来做一个将数值转换为相应的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)。感谢。

5 个答案:

答案 0 :(得分:1)

这里有一些VBA(带有测试代码)我在Excel中串联起来就可以了。除非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

答案 1 :(得分:0)

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();
}

答案 2 :(得分:0)

试试这个:

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];
}

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-1)

只需使用activecell.address,然后根据$所需的位置操作字符串。