Excel列名转换

这段时间工作中需要用到Excel的列名转换,如列A,转为1或索引0,AA转为27或索引26。于是开发了个代码解决这个问题,简单记录下来。以C#代码为例:

cs 复制代码
    /// <summary>
    /// 电子表格相关转换工具
    /// </summary>
    public class ColumnConvert
    {
        /// <summary>
        /// Excel列26进制
        /// </summary>
        private static readonly int ColumnRadix = 26;

        /// <summary>
        /// 列名转数字,从1开始
        /// </summary>
        /// <param name="column">列名</param>
        /// <returns>列编号</returns>
        public static int GetColumnNumber(string column)
        {
            int res = 0;
            int power = 1;
            var col = column.ToUpper();
            for (int i = col.Length - 1; i >= 0; i--)
            {
                char now = col[i];
                int diff = now - 'A';
                res += (diff + 1) * power;
                power *= ColumnRadix;
            }

            return res;
        }

        /// <summary>
        /// 列名转索引,从0开始
        /// </summary>
        /// <param name="column">列名</param>
        /// <returns>列索引</returns>
        public static int GetColumnIndex(string column)
        {
            return GetColumnNumber(column) - 1;
        }

        /// <summary>
        /// 列号转列名,从1开始
        /// </summary>
        /// <param name="colNum">列号</param>
        /// <returns></returns>
        public static string GetColumnName(int colNum)
        {
            StringBuilder res = new StringBuilder();
            int remain = (colNum - 1) % ColumnRadix;
            char addChar = (char)('A' + remain);
            res = res.Insert(0, addChar);
            colNum = (colNum - 1) / ColumnRadix;
            while (colNum >= 1)
            {
                int left = (colNum - 1) % ColumnRadix;
                char add = (char)('A' + left);
                res = res.Insert(0, add);
                colNum = (colNum - 1) / ColumnRadix;
            }
            return res.ToString();
        }
    }
相关推荐
Teable任意门互动几秒前
从飞书多维表格 简道云到Teable多维表格:企业为何选择Teable作为新一代智能数据协作平台?
数据库·excel·钉钉·飞书·开源软件
她和夏天一样热3 分钟前
【实战篇】设计模式在开发中的真实应用
java·开发语言·设计模式
TheSumSt8 分钟前
Python丨课程笔记Part2:方法论进阶部分
开发语言·笔记·python
微爱帮监所写信寄信14 分钟前
微爱帮监狱寄信写信小程序:深入理解JavaScript中的Symbol特性
开发语言·javascript·网络协议·小程序·监狱寄信·微爱帮
武藤一雄14 分钟前
C# 中线程安全都有哪些
后端·安全·微软·c#·.net·.netcore·线程
wuguan_20 分钟前
C#递推算法
算法·c#·递推算法
ss27322 分钟前
线程池工作机制:从任务提交到执行的完整决策流程
java·开发语言
syt_101330 分钟前
js基础之-如何理解js中一切皆对象的说法
开发语言·javascript·原型模式
yaoxin52112333 分钟前
276. Java Stream API - 使用 flatMap 和 mapMulti 清理数据并转换类型
java·开发语言·windows
lsx20240643 分钟前
Chart.js 极地图
开发语言