3

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

4

5 回答 5

1

这是我在 Excel 中串在一起的一些 VBA(带有测试代码),它可以解决问题。除非 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
于 2009-08-13T03:56:07.560 回答
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();
}
于 2009-08-13T03:56:56.683 回答
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];
}
于 2009-08-13T05:33:21.093 回答
-1

只需使用 activecell.address,然后根据 $ 所在的位置来处理您需要的字符串。

于 2009-10-02T04:25:34.653 回答
-1

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

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

于 2009-08-13T04:00:15.180 回答