如何提取excel列并将其导入到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色谱柱?
这是行不通的,因为你假设你的头只有一个字符,如下所示:
letter = find(ia) + 'A' - 1;
你在做什么基本上是build立在A
到Z
之间的大写字母的ASCII码。 这显然会失败,如果你试图find一个多个字母的标题。 你需要做的是build立AA
到ZZ
的所有可能的字符的字典,然后如果我们超过Excel工作表中的Z
列来提取出正确的序列,那么你可以在这个字典中使用find(ia)
的输出您需要的字符,然后最后使用这个字符序列索引到您的Excel工作表。
参考这个问题 ,我将采取Rody Oldenhuis的答案。 因此,构build这个所有可能的两个字符的字典:
x = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; y = unique(nchoosek(repmat(x, 1,26), 2), 'rows');
y
将是N x 2
字符matrix,其中每行是来自AZ
的两个字母(如AA
, AB
等)的唯一排列。 编写代码的方式,它应该保持精确的顺序,比如Excel如何处理超过Z
列,所以AA, AB, AC, ... AZ, BA, BB, BC, ... BZ, ..., ZX, ZY, ZZ
。 接下来,我们需要查看find的索引是否在1和26之间。如果是,则可以使用以前的代码。 如果不是的话,那么我们将按照上面所述的方法来做。 请注意,我将不得不减去26find的索引,所以我可以索引到我们创build的这个字符数组。 假设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
因为您希望存储要访问的单元格的string表示forms。 fprintf
(在你的情况下)将打印到屏幕上,这可能不是你想要的。 另外,我已经将variablescell
更改为ce
因为cell
是MATLAB中的一个实际function。
另请注意,由于标题可能包含多个字符,因此我已将%c
格式化string更改为%s
。