3

Excelファイルのタブ名の一部(すべてではない)のリストである次のセル配列があります。

選択したタブ =

'Screen'
'SectorAbsolute'
'SectorRelative'

このリストの内容に従って Excel シートの各タブを読み取り、タブの内容の表を返すにはどうすればよいですか? 新しいテーブルは、読み込まれたタブと同じ名前を持つ必要があります。

私は試しました(たとえば、「SectorAbsolute」タブの内容を含む「SectorAbsolute」というテーブルを作成するなど):

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

しかし、これはエラーを返します:

添え字を 1 つだけ使用してテーブルに添え字を付けることはできません。テーブルの添え字には、行と変数の両方の添え字が必要です。

4

2 に答える 2

4

構造体配列を利用する方法:

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

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

mytablesこれは、テーブルを含む構造配列を返します。シートに明示的にアクセスすることも (例: )、動的フィールド参照mytables.Sheet1を利用することもできます(例: ) 。mytables.(somestring)

于 2015-12-09T18:06:32.787 に答える
3

したがって、次のことができますが、動的に変数に名前を付けて使用すること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');

そして、トンとトンがあれば...

この回答で提案されている構造体の利用は、exxaza によって非常に滑らかに見えます。他のいくつかの方法は次のとおりです。

方法 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:

container.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ただし、変更しても、コンテナーに格納されているコピーは変更されないことに注意してください。

于 2015-12-09T17:35:04.730 に答える