如何提取 excel 列并将其导入 MATLAB?

How to extract excel column and import it to MATLAB?

您好,我有一个 excel 文件,最多包含 "CD" 个列。我的代码非常适合包含 26 列的 excel 文件,但在那之后它就不起作用了。

[ia ib] = ismember(header, {item});
letter = find(ia)+'A'-1;
cell  = fprintf('%c:%c', letter, letter);
out = xlsread('filename', cell);

此代码在我到达 Z:Z 之前有效。当我到达 AA、AB、AC 时,... 它不起作用。如何提取 AA、CD、BG 列?

它不起作用,因为您假设 header 的字母只有一个字符,如以下所示:

letter = find(ia) + 'A' - 1;

您所做的实际上是为 AZ 之间的大写字母构建 ASCII 码。如果您试图找到包含多个字母的 header,这显然会失败。你需要做的是建立一个包含 AAZZ 的所有可能字符的字典,然后如果我们超过 [=] 列,你可以在这个字典上使用 find(ia) 的输出14=] 在你的 Excel sheet 中提取出你需要的正确字符序列,然后最后使用这个字符序列索引到你的 Excel sheet.

参考this question, I'm going to take Rody Oldenhuis的回答。因此,构建所有可能的两个字符的字典:

x = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
y = unique(nchoosek(repmat(x, 1,26), 2), 'rows');

y 将是一个 N x 2 字符矩阵,其中每一行都是来自 A-Z 的两个字母的唯一排列(因此 AAAB、 ETC。)。按照代码的编写方式,它应该保持准确的顺序,就像 Excel 对超出 Z 的列所做的那样,所以 AA, AB, AC, ... AZ, BA, BB, BC, ... BZ, ..., ZX, ZY, ZZ。接下来,我们需要查看找到的索引是否在 1 到 26 之间。如果是,您可以使用您之前的代码。如果不是,那么我们将执行上面概述的操作。请注意,我必须将这个找到的索引减去 26,这样我才能索引到我们创建的这个字符数组中。假设 header 具有所有唯一条目,我们可以这样做:

[ia ib] = ismember(header, {item});
index = find(ia, 1);
if index <= 26 %// Check if we are within columns A - Z
    letter = index + 'A' - 1;
else %// If not, we are at a column that is beyond Z.
    x = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    y = unique(nchoosek(repmat(x, 1,26), 2), 'rows');
    index = index - 26; %// Subtract by 26 to reference into character array
    letter = y(index,:);
end
cell  = sprintf('%s:%s', letter, letter);
out = xlsread('filename', cell);

请注意,我将您的 fprintf 调用更改为 sprintf,因为您希望存储要访问的单元格的字符串表示形式。 fprintf (在您的情况下)将打印到屏幕上,这可能不是您想要的。此外,我已将变量 cell 更改为 ce,因为 cell 是 MATLAB 中的实际函数。

另请注意,我已将 %c 格式字符串更改为 %s,因为 header 可能包含多个字符。