2

ActiveX を使用して、Matlab 内から既存の Excel ワークブックを開く必要があります。xlsread は遅すぎるため実行できません。このフォーラムから助けを得た後 (ありがとう!)、matlab 内から新しい Excel ワークブックを作成し、出力を入力するには、次のようにします。

    %# Create and NAME the output file name
    wbk=1;fName = fullfile(pwd, 'ALLSDtemp2');
    %# create Excel COM Server
    Excel = actxserver('Excel.Application');
    Excel.Visible = true;
    %# delete existing file
    if exist(fName, 'file'), delete(fName); end
    %# create new XLS file
    wb = Excel.Workbooks.Add();
    wsheet=1;

    (...calculations...)

    % Write output to excel file
    Mat=[calculation_output];
    % Select work book
    wb.Sheets.Item(wsheet).Activate();
    % Get Worksheets object
    ws = wb.Sheets;
    %# insert matrix in sheet
    Excel.Range(cellRange).Select();
    Excel.Selection.Value = num2cell(Mat);

しかし、既に存在する Excel ワークブックでこれを行う方法がわかりません。そうしようとした私の努力が先日、私のコンピューターに「重大なエラー」を引き起こしました。だから私は本当にいくつかのガイダンスを使用することができました.

ありがとう

4

2 に答える 2

1

XLSREADは、実際にはActiveXを介してファイルにアクセスしています。これは、目的の方法と同じです。あなた自身の(そしてうまくいけばバグがない)手順を書く理由は見当たらない。

XLSREADが遅すぎる場合は、PROFILERを使用して、関数のパフォーマンスのボトルネックを見つけることができます。

と入力すると、XLSREADが何をしているかを実際に確認できますedit xlsread。関数を含むmファイルがMATLABエディターで開かれます。コードを学習し、優れたMATLABデバッグツールを使用して実際に1行ずつ実行できます。

于 2012-04-09T20:30:05.297 に答える
0

あなたの質問から、既存の Excel ファイルを変更したいだけなのか、現在 Excel で開いている Excel ファイルを変更したいのかわかりません。

最初の場合は、次のように開くことができます。

xl = actxserver('Excel.Application');
xl.Visible = true;
wb = xl.Workbooks.Open('path_to_my_excel_file');

そして、すでに行っているように、必要な変更を続けます。

現在 Excel で開いている Excel ファイルにアクセスする場合は、actxGetRunningServer代わりにactxserver. 実行中の Excel のコピーに接続し、開いているブックを見つけることができます。

ちなみに、値を変更するために範囲を選択する必要はありません。あなたはただ使うことができますws.Range(cellRange).Value = myValue。あちこちで数行のコードを節約できるかもしれません。

于 2012-04-10T12:31:52.057 に答える