0

C ドライブに、同じ形式の多数の Excel ファイルを含むディレクトリがあります。オンラインで見つけた次のスクリプトを使用して、列 H を各ファイルから新しいファイルにコピーしたいと思います。

dirs=dir('C:\xxx\*.xlsx');
dircell=struct2cell(dirs);
filenames=dircell(1,:);
range = 'H:H';
n = (numel(filenames));
for i = 1:n;
     Newfile(:,i) = xlsread(filenames{i},range);
end

これにより、「添え字代入次元が一致しません」というエラー メッセージが表示されます。結果のファイル (Newfile) で 1 つの列のみが抽出されます。

範囲をいじってみると、xlsread が最初のファイルのリストの最後に到達するとエラーが発生し、値が空になると停止することに気付きました。私の列 H には異なる数の入力値があります (つまり、ファイル 1 には 20、ファイル 2 には 100、ファイル 3 には 3 などがあります)。

したがって、私の質問は、空のセルに遭遇したときに空のセルまたは NaN セルのいずれかが抽出され、最も重要なこととして、次の列に移動するようにこのスクリプトを変更できるかどうかです。

事前に助けてくれてありがとう!

4

1 に答える 1

0

自宅に Matlab がないので、頭の上から取得する必要があります。
読み取った列 H には有効なエントリの数が異なるため、それらを結果の配列 NewFile に直接強制するのではなく、一時変数を使用する必要があります。

dirs=dir('C:\xxx\*.xlsx');
dircell=struct2cell(dirs);
filenames=dircell(1,:);
range = 'H:H';
n = numel(filenames);
Newfile = NaN*ones(1, n);
for nf = 1:n;
     tempVar = xlsread(filenames{nf},range);
     r = size(NewFile,1); % get number of rows in NewFile
     if length(tempVar) > r
         % Make Newfile big enough to fit column nf
         Newfile = [Newfile;NaN*ones(length(tempVar)-r,n)];
     end
     Newfile(:,nf) = tempVar;
end
于 2015-01-01T19:34:55.853 に答える