从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中的副本;