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();
        }
    }
相关推荐
无巧不成书02183 分钟前
Unicode编码机制全解析:从核心原理到Java 实战
java·开发语言·java字符编码·unicode 15.1码点
楼田莉子3 分钟前
设计模式:构造器模式
开发语言·c++·后端·学习·设计模式
lly2024064 分钟前
Swift 析构过程
开发语言
mu_guang_7 分钟前
计算机体系结构3-cache一致性和内存一致性的区别
java·开发语言·计算机体系结构
lingggggaaaa12 分钟前
PHP模型开发篇&MVC层&动态调试未授权&脆弱鉴权&未引用&错误逻辑
开发语言·安全·web安全·网络安全·php·mvc·代码审计
星原望野12 分钟前
java:volatile关键字的作用
java·开发语言·volatile
APIshop18 分钟前
Java获取淘宝商品价格、图片与视频:淘宝开放平台API实战指南
开发语言·python
William_cl18 分钟前
C# ASP.NET 分层架构实战:BLL (Service) 业务层从入门到封神(规范 + 避坑)
架构·c#·asp.net
XiYang-DING19 分钟前
【Java】Map和Set
java·开发语言
小则又沐风a22 分钟前
STL库: string类
开发语言·c++