如何将Excel工作表列名转换为数字?

Vic*_*ues 14 c# excel

我想知道将Excel工作表列名转换为数字的最佳方法是什么.

我正在使用Excel Package,一个很好的库来处理.xlsx文档.遗憾的是,此库未包含此功能.

OBS:第一列A对应于此库中的数字1.

Nol*_*rin 56

此函数应适用于任意长度的列名称.

public static int GetColumnNumber(string name)
{
    int number = 0;
    int pow = 1;
    for (int i = name.Length - 1; i >= 0; i--)
    {
        number += (name[i] - 'A' + 1) * pow;
        pow *= 26;
    }

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

  • **注意**当给定的**列名**(`name`)**为大写**时,这只能按预期工作.(将`name [i]`替换为`name.ToUpper()[i]`来解决这个问题.) (2认同)

Dan*_*ner 15

几个月前我不得不处理这件事.列名的反列索引 - 也很有趣,如果你尝试用基于零的索引解决它而不是认识到这会使事情复杂化,那就变得非常麻烦.如果它是一个普通的多元数字系统,它可能会如此简单......

这是我的解决方案的简化版本作为扩展方法,没有错误处理和所有这些东西.

public static Int32 ToOneBasedIndex(this String name)
{
    return name.ToUpper().
       Aggregate(0, (column, letter) => 26 * column + letter - 'A' + 1);
}
Run Code Online (Sandbox Code Playgroud)