Excel 单元格列名转换
作者:互联网
单元格列索引的问题
在 Excel 中,一个单元格被行列名唯一确定。
例如,A1
单元格表示左上角第 1 个单元格。
行索引为数字,列索引为 A-Z 的字母。
实际上列索引是一种由 26 个字母组成的 26 进制数。当列数超过 26(Z)时,显示为两位字母;超过702(ZZ)时,显示为三位字母,依此类推。
所以一旦我们的数据多起来,列索引成了一个很大的麻烦。
代码实现与原理
好在这种规律实际上是按照进制规律设计的,下面写一个简单的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
上述代码基本原理就是短除法,以二进制为例,过程如下:
这里我们只不过将26进制数翻译成了A-Z。
测试与验证
测试以下效果:
clear;close all;clc;
colId = 1542;
colName = getCellColIndex(colId)
输出结果如下:
colName =
BGH
查验表格,结果一致。
标签:26,进制,colName,列名,单元格,Excel,索引,colId 来源: https://www.cnblogs.com/gshang/p/16390476.html