其他分享
首页 > 其他分享> > Excel 单元格列名转换

Excel 单元格列名转换

作者:互联网

单元格列索引的问题

在 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