如何仅使用不带字母的数字(如A1或B2)访问Excel工作表中的单元格

时间:2019-01-15 12:13:55

标签: excel matlab

我正在编写Matlab脚本以从Excel工作表访问数据。我不想使用字母(例如B1)访问单元格。但是我无法使用cell(row,column)访问单元格。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

这组函数会将任何数字转换为等效的Excel列:

Cletter = @(c) char(mod(c,26)+(mod(c,26)==0)*26+64);
AZbase = @(c) fliplr(cumprod([c repmat(1/26,1,2)]));
xlCOL = @(c) Cletter(nonzeros(floor((AZbase(c)-circshift(mod(AZbase(c),26)==0,-1)).*(c>[702 26 0]))).');

您可以将它们组合为一个功能,但是我更喜欢将它们分开,这样就不难理解它们的工作原理。

例如:

>> xlCOL(6504)
ans =
    'IPD'

现在,您可以使用另一对函数扩展它们以构建范围字符串:

RC2AB = @(row,col) [xlCOL(col) int2str(row)]; 
makeRange = @(c1,c2) [RC2AB(c1(1),c1(2)) ':' RC2AB(c2(1),c2(2))];

(再次,我更希望将它们分开...)

例如:

>> makeRange([12,321],[46,951])
ans =
    'LI12:AJO46'

请注意,makeRange中的输入是两个2元素向量,一个用于范围内的第一个单元格,一个用于最后一个单元格。在每个单元格中,第一个元素是行,第二个元素是列。

您可以在Excel中使用公式ADDRESS(row_num, column_num)验证此结果。

这仅是为了简单使用。它不会执行任何检查以确保这是有效范围(例如,第二个单元格不在第一个单元格的上方/左侧,并且列/行号不在范围之内)。


我将这个问题更多地看作是挑战,而不是真正的问题。毫无疑问,编写带有函数的小型m文件(如linked answer中的文件)会更简单。但是我必须找到一种通过一些匿名函数来完成此操作的方法。
不过,此答案并未提供任何有关其工作原理的解释,因为我认为没有人会对它感兴趣,但是如果您这样做,请发表评论,然后再添加一些解释。