Matlab:使用 xlsread 从 excel 电子表格中读取多列
Matlab: read multiple columns from an excel spreadsheet by using xlsread
我有一个包含 300 列的 Excel sheet,我只需要其中的几个范围。在正常情况下,我使用“导入数据”应用程序。但是这次是不可能的,因为有的字符串是double的。我只想 读取第一行,然后从中读取几列 (所有字符串)。
举个例子:
我的第一行是这样的字符串:
x= ["'[23Na]+'" , "'[24Mg]+'" , "'[25Mg]+'" , "'[26Mg]+'" , "'[26Mg]++'" , "'[27Al]+'" , "'C2H3+'" , "'[28Si]+'"]
现在我只想拥有 A1:B1 和 E1:F1。我如何在这里使用具有多个范围的 xlsread 以这样的字符串结尾:
x= ["'[23Na]+'" , "'[24Mg]+'" , "'[26Mg]++'" , "'[27Al]+'"]
我很感激每一个提示。
我希望我的回答不会因为试图说服您以不同的方式解决问题而被否决。 :-)
问题是two-fold:
问题 1. xlsread()
不支持不相交的范围。这意味着读取不相交范围的唯一方法是为每个连续范围调用 xlsread()
,然后合并结果,例如:
FNAME = 'Book1.xlsx';
SHNAME = 'Sheet1';
RANGES = {'A1:B1', 'E1:F1'};
READFUN = @(rg) xlsread(FNAME, SHNAME, rg);
[~,~,raw] = cellfun(READFUN, RANGES, 'UniformOutput', 0);
x = [raw{:}]; % [!] depending on RANGES, this might fail
问题2.每次调用时,xlsread()
(a)实例化一个COM服务器为Excel, (b)打开文件,(c)读取数据,(d)关闭文件,然后 (e) 清理 COM 服务器。步骤 (a)、(b)、(d) 和 (e) 添加了很多开销,以便在步骤 (c) 中读取一个小范围。
Approach. 我建议你在一次读取中获取 所有 原始数据:它会更快并且(足够有趣)少 memory-intensive。您将获得一个包含 sheet 中所有数据的元胞矩阵,但随后您可以使用 MATLAB 的 way-more-powerful 索引功能(与 Excel' s 范围):
[~,~,raw] = xlsread(FNAME, SHNAME); % all the data, numeric or text
x = raw(1, [1,2,5,6]);
... continue processing here
我有一个包含 300 列的 Excel sheet,我只需要其中的几个范围。在正常情况下,我使用“导入数据”应用程序。但是这次是不可能的,因为有的字符串是double的。我只想 读取第一行,然后从中读取几列 (所有字符串)。 举个例子: 我的第一行是这样的字符串:
x= ["'[23Na]+'" , "'[24Mg]+'" , "'[25Mg]+'" , "'[26Mg]+'" , "'[26Mg]++'" , "'[27Al]+'" , "'C2H3+'" , "'[28Si]+'"]
现在我只想拥有 A1:B1 和 E1:F1。我如何在这里使用具有多个范围的 xlsread 以这样的字符串结尾:
x= ["'[23Na]+'" , "'[24Mg]+'" , "'[26Mg]++'" , "'[27Al]+'"]
我很感激每一个提示。
我希望我的回答不会因为试图说服您以不同的方式解决问题而被否决。 :-)
问题是two-fold:
问题 1. xlsread()
不支持不相交的范围。这意味着读取不相交范围的唯一方法是为每个连续范围调用 xlsread()
,然后合并结果,例如:
FNAME = 'Book1.xlsx';
SHNAME = 'Sheet1';
RANGES = {'A1:B1', 'E1:F1'};
READFUN = @(rg) xlsread(FNAME, SHNAME, rg);
[~,~,raw] = cellfun(READFUN, RANGES, 'UniformOutput', 0);
x = [raw{:}]; % [!] depending on RANGES, this might fail
问题2.每次调用时,xlsread()
(a)实例化一个COM服务器为Excel, (b)打开文件,(c)读取数据,(d)关闭文件,然后 (e) 清理 COM 服务器。步骤 (a)、(b)、(d) 和 (e) 添加了很多开销,以便在步骤 (c) 中读取一个小范围。
Approach. 我建议你在一次读取中获取 所有 原始数据:它会更快并且(足够有趣)少 memory-intensive。您将获得一个包含 sheet 中所有数据的元胞矩阵,但随后您可以使用 MATLAB 的 way-more-powerful 索引功能(与 Excel' s 范围):
[~,~,raw] = xlsread(FNAME, SHNAME); % all the data, numeric or text
x = raw(1, [1,2,5,6]);
... continue processing here