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();
        }
    }
相关推荐
DARLING Zero two♡24 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study26 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑1 小时前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭1 小时前
Java中的动态代理
java·开发语言·aop·动态代理
小远yyds1 小时前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
何曾参静谧1 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++