从 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)
)
我有以下单元格数组,它是 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)
)