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();
        }
    }
相关推荐
Elias不吃糖31 分钟前
整合了c++里面常用的STL及其常用API
开发语言·c++·学习·stl
E***q53935 分钟前
后端服务限流实现,Spring Cloud Alibaba Sentinel
java·开发语言·sentinel
橘子海全栈攻城狮1 小时前
【源码+文档+调试讲解】实验室耗材管理系统springboot 094
java·开发语言·spring boot·后端·spring
范纹杉想快点毕业1 小时前
《嵌入式硬件从入门到精通:电源 / 模电 / 数电 / 通信核心全解析》
java·开发语言·数据库·单片机·嵌入式硬件
Ryan ZX1 小时前
【Go语言基础】Go语言开发环境搭建
开发语言·后端·golang
x***J3481 小时前
后端服务限流算法,计数器与滑动窗口
java·开发语言
二川bro2 小时前
第51节:Three.js源码解析 - 核心架构设计
开发语言·javascript·ecmascript
-大头.2 小时前
响应式编程实战:WebFlux与RSocket深度解析
java·开发语言
异步的告白2 小时前
C语言-数据结构-2-单链表程序-增删改查
c语言·开发语言·数据结构
CryptoRzz3 小时前
印度股票数据 PHP 对接文档 覆盖 BSE(孟买证券交易所)和 NSE(印度国家证券交易所)的实时数据
android·服务器·开发语言·区块链·php