如何提取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立在AZ之间的大写字母的ASCII码。 这显然会失败,如果你试图find一个多个字母的标题。 你需要做的是build立AAZZ的所有可能的字符的字典,然后如果我们超过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的两个字母(如AAAB等)的唯一排列。 编写代码的方式,它应该保持精确的顺序,比如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