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

조회 수: 45 (최근 30일)
kozo
kozo 2022년 6월 20일
댓글: kozo 2022년 6월 25일
複数の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));
など試みましたが上手く行きません.
基本的な,配列タイプの理解が出来ていない事が原因だと分かっているのですが,どなたかご教示頂けないでしょうか.
どうかよろしくお願いします.

답변 (3개)

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

댓글을 달려면 로그인하십시오.


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

kozo
kozo 2022년 6월 20일
편집: kozo 2022년 6월 20일
ご指摘ありがとうございます.
修正しました.
また併せて,エラーの内容も修正いたしました.

Community Treasure Hunt

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

Start Hunting!