从Excel选项卡自动创build和命名Matlab中的表

我有以下单元格数组,这是一个(但不是全部)在Excel文件中的选项卡名称的列表:

selectedTabs =

'Screen' 'SectorAbsolute' 'SectorRelative' 

如何根据列表中的内容读取Excel表格的每个选项卡并返回标签内容的表格? 新表应该与读取的标签具有相同的名称。

我尝试过(例如,创build一个名为“SectorAbsolute”的表,其中包含“SectorAbsolute”选项卡的内容):

 char(chosenTabs(2))=readtable(inputFile,'Sheet',char(chosenTabs(2))) 

但是这会返回错误:

只能使用一个下标来标记表格。 表下标需要行和variables下标。

一种利用结构数组的方法:

 chosentabs = {'Sheet1', 'Sheet3'}; ntabs = length(chosentabs); for ii = 1:ntabs mytables.(chosentabs{ii}) = readtable('test.xlsx', 'Sheet', chosentabs{ii}); end 

它返回mytables ,一个包含你的表的结构数组。 你可以显式地访问你的工作表(例如mytables.Sheet1 )或者利用dynamic字段引用 (例如mytables.(somestring)

所以你可以做下面的事情,但是请注意dynamic命名variables并且不推荐使用eval

 my_command_string = [chosenTabs{i},'=readtable(inputFile,''Sheet'',chosenTabs{i})']; eval(my_command_string); 

如果我是编码:

我可能只是写出来(除非有吨…):

 tab_Screen = readtable(inputFile,'Sheet','Screen'); tab_SectorAbsolute = readtable(inputFile,'Sheet','SectorAbsolute'); 

如果有吨和吨…

利用一个结构,在这个答案build议excaza看起来很漂亮。 其他一些方法是:

方法1:

 n_chosenTabs = length(chosenTabs); chosenTabs_data = cell(n_chosenTabs, 1); for i=1:n_chosenTabs chosenTabs_data{i} = readtable(inputFile,'Sheet',chosenTabs{i}); end 

方法2:

您也可以使用containers.Map从标签名称到实际表格。 加载地图:

 tab_map = containers.Map; for i=1:n_chosenTabs tab_map(chosenTabs{i}) = readtable(inputFile,'Sheet',chosenTabs{i}); end 

然后你可以用类似的东西访问单个表。

 local_copy_of_sector = tab_map('Sector'); 

请注意,如果更改local_copy_of_sector ,它将不会更改存储在containers.Map中的副本;