Excel 列名转int索引(C#版)

Posted wosperry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel 列名转int索引(C#版)相关的知识,希望对你有一定的参考价值。

/// <summary>
/// 获取Excel实际列索引
/// </summary>
/// <param name="columnName">Excel列名</param>
/// <returns>int格式索引</returns>
public int GetColumnIndex(string columnName)
{
	int result = 0;
	// A-Z 转换成 0-25的数字,并反转
	int[] colReverse = Encoding.ASCII.GetBytes(columnName.ToUpper()).Select(x =>
	{
		int aIndex = Encoding.ASCII.GetBytes("A")[0];
		int zIndex = Encoding.ASCII.GetBytes("Z")[0];
		return x < aIndex || x > zIndex ? 
            throw new ArgumentException($"参数有误{nameof(columnName)}") : 
        		x - aIndex;
	}).Reverse().ToArray();

    // 当成26进制数,遍历计算
    for (int i = 0; i < colReverse.Count(); i++)
    {
        // 个位(0~25)  其他位(1~26)
        int vReal = colReverse[i] + (i == 0 ? 0 : 1);
        result += vReal * (int)Math.Pow(26, i);
    }
    return result;
}

以上是关于Excel 列名转int索引(C#版)的主要内容,如果未能解决你的问题,请参考以下文章

使用列名从excel中读取数据并插入到C#中的SQL表中

代码段:通过索引获取对应的Excel列名; 索引从0开始,返回形如 A,B,C,...,Z,AA,AB,...,AZ,BA,...,ZZ,AAA,AAB,......

Pandas库read_excel()参数详解

c#操作EXCEL

C#实现DataTable行列转置

2015版vs c#读取excel代码