将Excel列字母转换为其数字的算法是什么?

Dav*_*rab 58 c# math excel

我需要一个算法将Excel列字母转换为正确的数字.

这将编写的语言是C#,但任何会做甚至伪代码.

请注意我将把它放在C#中,我不想使用office dll.

对于'A',预期结果将为1

因为'AH'= 34

对于'XFD'= 16384

Ian*_*son 108

public static int ExcelColumnNameToNumber(string columnName)
{
    if (string.IsNullOrEmpty(columnName)) throw new ArgumentNullException("columnName");

    columnName = columnName.ToUpperInvariant();

    int sum = 0;

    for (int i = 0; i < columnName.Length; i++)
    {
        sum *= 26;
        sum += (columnName[i] - 'A' + 1);
    }

    return sum;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用Math.Pow实际上不是最好的想法(浮点问题,性能......)使用'sum*= 26; sum + =(characters [i] -'A'+ 1);' (5认同)

mqp*_*mqp 16

int result = colName.Select((c, i) =>
    ((c - 'A' + 1) * ((int)Math.Pow(26, colName.Length - i - 1)))).Sum();
Run Code Online (Sandbox Code Playgroud)


wet*_*tes 7

int col = colName.ToCharArray().Select(c => c - 'A' + 1).
          Reverse().Select((v, i) => v * (int)Math.Pow(26, i)).Sum();
Run Code Online (Sandbox Code Playgroud)


Spa*_*arr 5

从最后到第一个循环浏览字符。将每个字母(A = 1,Z = 26)的值乘以26 ** N,将其相加。我不具备C#的字符串操作技能,因此这里有一些非常混杂的伪代码:

sum=0;
len=length(letters);
for(i=0;i<len;i++)
  sum += ((letters[len-i-1])-'A'+1) * pow(26,i);
Run Code Online (Sandbox Code Playgroud)


小智 5

如果有人感兴趣,这是我用 JavaScript 编写的解决方案。

var letters = "abc".toUpperCase();
var sum = 0;
for(var i = 0; i < letters.length;i++)
{
    sum *= 26;
    sum += (letters.charCodeAt(i) - ("A".charCodeAt(0)-1));
}
alert(sum);
Run Code Online (Sandbox Code Playgroud)