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

31 views (last 30 days)
kozo
kozo on 20 Jun 2022
Commented: kozo on 25 Jun 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));
など試みましたが上手く行きません.
基本的な,配列タイプの理解が出来ていない事が原因だと分かっているのですが,どなたかご教示頂けないでしょうか.
どうかよろしくお願いします.

Answers (3)

Hiro
Hiro on 21 Jun 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 Comment
kozo
kozo on 25 Jun 2022
Hiroさん
返答が遅れすみません.
ご教示ありがとうございます.
凄いシンプルで動作が軽くなるのですね.
勉強になります.
一点,tabularTextDatastoreが上手く行かず以下のようにdatastoreとだけしてみました.
ds = datastore("*.xlsx",);
大変たすかりました.
今後分析などで役立ちそうなので,(「データストア入門」がmatlabで準備されているようなので,)いろいろと勉強してみようかと思います.

Sign in to comment.


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

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

Community Treasure Hunt

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

Start Hunting!