2

533 の異なる Excel ファイルから列を選択する for ループを含むスクリプトを作成し、それらを比較できるように行列に配置しましたが、プロセスに時間がかかりすぎています (昨日 3 時間実行され、途中でもありませんでした)。 !!))。

xlsread が当然遅いことは知っていますが、スクリプトをより速く実行する方法を知っている人はいますか? スクリプトは以下です、ありがとう!!

%Split the data into g's and h's
CRNum = 533; %Number of Carrington Rotation files
A(:,1) = xlsread('CR1643.xlsx','A:A'); % Set harmonic coefficient columns
A(:,2) = xlsread('CR1643.xlsx','B:B');
B(:,1) = xlsread('CR1643.xlsx','A:A');
B(:,2) = xlsread('CR1643.xlsx','B:B');

for k = 1:CRNum
    textFileName = ['CR' num2str(k+1642) '.xlsx'];
A(:,k+2) = xlsread(textFileName,'C:C'); %for g
B(:,k+2) = xlsread(textFileName,'D:D'); %for h
end
4

3 に答える 3

2

xlsreadループを通過したい場合は使用しないでください。呼び出すたびにExcelを開き、Excelサーバーを閉じるため、時間がかかります。代わりに、ループを使用actxserverしてExcelを開く前に、必要なことを行いactxserver、ループの後に最後に閉じます。の使用例については 、MATLAB ヘルプで「Excel をオートメーション サーバーとして使用してスプレッドシート データを読み取る」をactxserver検索してください。

また、readtableよりも高速に動作するがxlsread、代わりにテーブルを生成するものも見てください。

于 2016-06-16T11:52:55.553 に答える