我正在编写Matlab脚本以从Excel工作表访问数据。我不想使用字母(例如B1)访问单元格。但是我无法使用cell(row,column)访问单元格。
有人可以帮我吗?
答案 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中的文件)会更简单。但是我必须找到一种通过一些匿名函数来完成此操作的方法。
不过,此答案并未提供任何有关其工作原理的解释,因为我认为没有人会对它感兴趣,但是如果您这样做,请发表评论,然后再添加一些解释。