ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Excel 单元格列名转换

2022-06-19 15:04:02  阅读:190  来源: 互联网

标签:26 进制 colName 列名 单元格 Excel 索引 colId


单元格列索引的问题

在 Excel 中,一个单元格被行列名唯一确定。

例如,A1 单元格表示左上角第 1 个单元格。

image

行索引为数字,列索引为 A-Z 的字母。

实际上列索引是一种由 26 个字母组成的 26 进制数。当列数超过 26(Z)时,显示为两位字母;超过702(ZZ)时,显示为三位字母,依此类推。

image

image

所以一旦我们的数据多起来,列索引成了一个很大的麻烦。

代码实现与原理

好在这种规律实际上是按照进制规律设计的,下面写一个简单的10进制转26进制,并由数字进制数转到 Excel 这种字母进制数。

function colName = getCellColIndex(colId)
%getCellColIndex 根据列序号获取excel单元格列索引名
%   colName = getCellColIndex(colId)
%   num_input 单元格列序号
%   colName 单元格列索引名

colName = [];  % 记录单元格纵向索引名
getChar = @(input) char(input + abs('A')-1); % 1-26转A-Z字符
base = 26; % 26进制数
if(colId<base) % 小于 26 直接转换成 A-Z 字符
    colName = getChar(colId);
else
    while(colId~=0) % 除以 base 直到商为 0
        num = rem(colId, base);                 % 取余
        colName = strcat(getChar(num),colName); % 向高位拼接字符
        colId = fix(colId/base);                % 取商
    end
end
end

上述代码基本原理就是短除法,以二进制为例,过程如下:
image
这里我们只不过将26进制数翻译成了A-Z。

测试与验证

测试以下效果:

clear;close all;clc;
colId = 1542;
colName = getCellColIndex(colId)

输出结果如下:

colName =

BGH

查验表格,结果一致。

image

标签:26,进制,colName,列名,单元格,Excel,索引,colId
来源: https://www.cnblogs.com/gshang/p/16390476.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有