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();
        }
    }
相关推荐
bu_shuo2 小时前
Excel单元格中插入自定义超链接
excel
meisongqing2 小时前
DeepSeek + Excel:数据处理专家 具体步骤
excel·deepseek
无名之逆5 小时前
Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
服务器·开发语言·前端·后端·http·面试·rust
江沉晚呤时5 小时前
使用 .NET Core 实现 RabbitMQ 消息队列的详细教程
开发语言·后端·c#·.netcore
大模型铲屎官5 小时前
从零精通机器学习:线性回归入门
开发语言·人工智能·python·算法·机器学习·回归·线性回归
搞不懂语言的程序员5 小时前
单例模式详解(java)
java·开发语言·单例模式
WangMing_X5 小时前
C#实现图像缩放与裁剪工具
开发语言·c#·图像
Python破壁人手记5 小时前
《我的Python觉醒之路》之转型Python(十五)——控制流
java·服务器·开发语言·网络·python
siy23336 小时前
[c语言日寄]浮点数的排序
c语言·开发语言·数据结构·笔记·学习
天人合一peng6 小时前
C# PaddleOCR字符识别
开发语言·c#