从 Excel 个选项卡在 Matlab 中自动创建和命名表

Automatically Create and Name Tables in Matlab from Excel Tabs

我有以下单元格数组,它是 excel 文件中部分(但不是全部)选项卡名称的列表:

chosenTabs =

'Screen'
'SectorAbsolute'
'SectorRelative'

如何根据此列表中的内容和 return 选项卡内容的 table 读取 excel sheet 的每个选项卡?新的 tables 应该与读取的选项卡同名。

我已经尝试过(例如创建一个名为 'SectorAbsolute' 的 table 包含选项卡的内容 'SectorAbsolute'):

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

但这 return 是错误:

You can not subscript a table using only one subscript. Table subscripting requires both row and variable subscripts.

因此您可以执行以下操作,但请注意,不建议动态命名变量和使用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');

如果有吨吨...

使用结构,excaza 在 中提出的建议看起来很巧妙。其他一些方法是:

方法一:

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

方法二:

您也可以使用 containers.Map 从选项卡名称转到实际的 table。加载地图:

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

然后您可以使用类似的方式访问个人 table。

local_copy_of_sector = tab_map('Sector');

请注意,如果您更改 local_copy_of_sector,它不会更改存储在 containers.Map;

中的副本

一种利用structure array的方法:

chosentabs = {'Sheet1', 'Sheet3'};
ntabs = length(chosentabs);

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

其中 returns mytables,一个包含您的表的结构数组。您可以明确访问您的工作表(例如 mytables.Sheet1)或使用 dynamic field referencing(例如 mytables.(somestring)