複数のExcelファイルを連続して読み込みたい

41 visualizaciones (últimos 30 días)
kozo
kozo el 20 de Jun. de 2022
Comentada: kozo el 25 de Jun. de 2022
複数のExcelファイルを連続して読み込みたいと考え,以下のプログラムを作成したのですが,
FileList = dir(['*.xlsx']); %同じフォルダ内のExcelファイルの一覧を作成
t = struct2table(FileList); %ファイルの一覧を構造体配列からテーブルに変換
name = t(:,1); %ファイル名のみの配列を作成
%readtableを繰り返し
for i = 1:size(str);
filename = name(i,1);
T = readtable(filename);
end
エラー: readtable (line 198)
File input は空でない文字ベクトルまたは string スカラーでなければなりません。
エラー: Untitled2 (line 7)
T = readtable(filename);
と表示されてしまいます.
cell配列のままであることが問題だと考え,for文の前に
t = cell2mat(name(:,1));
cha = char(name(:,1));
など試みましたが上手く行きません.
基本的な,配列タイプの理解が出来ていない事が原因だと分かっているのですが,どなたかご教示頂けないでしょうか.
どうかよろしくお願いします.

Respuestas (3)

Hiro Yoshino
Hiro Yoshino el 21 de Jun. de 2022
Datastore を使うと、ループ無しでスッキリ書けます (Datastore)
ds = tabularTextDatastore("*.xlsx",ReadSize="file");
こうすると
T = ds.read() % もしくはread(ds) 
の度にファイルが1つずつテーブルデータとして出てきます。
ロードしたくないデータなどは事前に弾いておけるので、オプションを活用して高速に・スマートに出来るかと思います。
この場合、同じものは:
ds = tabularTextDatastore("*.xlsx",ReadSize="file");
for k=1:numel(ds.Files)
T = ds.read();
end
こんな感じです。
  1 comentario
kozo
kozo el 25 de Jun. de 2022
Hiroさん
返答が遅れすみません.
ご教示ありがとうございます.
凄いシンプルで動作が軽くなるのですね.
勉強になります.
一点,tabularTextDatastoreが上手く行かず以下のようにdatastoreとだけしてみました.
ds = datastore("*.xlsx",);
大変たすかりました.
今後分析などで役立ちそうなので,(「データストア入門」がmatlabで準備されているようなので,)いろいろと勉強してみようかと思います.

Iniciar sesión para comentar.


Hernia Baby
Hernia Baby el 20 de Jun. de 2022
以下の行、全角文字のスペースが入っています。
name = t(:,1);        %ファイル名のみの配列を作成
以下に変更してください(Tabキーで文字を揃えました)
name = t(:,1); %ファイル名のみの配列を作成

kozo
kozo el 20 de Jun. de 2022
Editada: kozo el 20 de Jun. de 2022
ご指摘ありがとうございます.
修正しました.
また併せて,エラーの内容も修正いたしました.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!