2

Windows7EnterpriseでのmatlabR2010Bの実行

matlabスクリプトでは、一連の結果をWordファイルに保存し、最後にWordを閉じて終了します。私が使用するコードは次のとおりです。

WordFname = ['BatInfoDoc' sprintf('%0.3f',now) '.doc']; % serialnumbered filenames
WordFile = fullfile(pwd,WordFname);
WordApp = actxserver('Word.Application');
WordDoc = WordApp.Documents.Add;
WordDoc.SaveAs2(WordFile);
....
WordApp.Selection.TypeText([title2 title3 title4 title5 title6]);
WordApp.Selection.TypeParagraph;

そして最後にスクリプトの最後に

WordDoc.Close;
WordApp.Quit;

私が抱えている問題は、開発プロセスを通じて、matlabスクリプトをクラッシュさせ、孤立したWINWORD.EXEプロセスを残してしまうことがよくあることです。各プロセスは、書き込んでいたファイルをロックし続けます。

これまで、私はTaskManagerを使用して、これらのプロセスを1つずつ手動で強制終了してきました。午前中ずっと開発を続けてきた私は、約11個の孤立したWINWORD.EXEプロセスによってロックされているため、削除できない約20個のファイルがあることに気付きました。

私の質問:1)ファイルの書き込み、保存、クローズなどを処理するエレガントな方法はありますか?スクリプトがクラッシュしたときに、閉じる部分に到達する前にファイルとプロセスをロックしないようにします。ファイルして単語を終了しますか?2)matlabスクリプト内から不良プロセスを特定し、matlabスクリプト内からそれらを調べて削除するための洗練された方法はありますか?つまり、MATLABをコーディングして、それ自体がクリーンアップされるようにすることはできますか?

数分後に追加:ちなみに、すべてのコードを大きなtry-catchで囲み、エラーを見つけたらウィンドウを閉じたくありません。これに伴う問題は、エラーが発生したときにデバッグモードに移行するのが好きで、エラーが検出されてもデバッグモードに移行しないことです。

4

2 に答える 2

2

作成した直後にWordapp、を使用しますc = onCleanup(@()Wordapp.Quit)。関数が自然にまたはクラッシュして終了するcと、関数は削除され、その関数が実行され、Wordが終了します。これが関数ではなくスクリプトの一部である場合は、手動で削除cして終了できます。

また、開発/デバッグ中に、必要に応じて手動で単語を閉じることができるように設定Wordapp.Visibleします。true本番環境に戻りfalseます。

于 2012-05-31T20:09:47.530 に答える
2

ハンドルクラスを使用して、それらを自動的に削除します。

classdef SafeWord < handle 

  properties(Access=public)
       WordApp;
  end

  methods(Access=public)
    function this = SafeWord(WordApp)
        this.WordApp= WordApp;
    end

   function delete(this)
      this.WordDoc.Close;
      this.WordApp.Quit;
   end
 end
end

そしてユースケース:

  sw = SafeWord(Word.Application());
  WordApplication = sw.WordApp;
 % Do something here

 % When sw ends its lifecycle, it calls delete.

これは関連する質問です。

于 2012-05-31T17:52:15.733 に答える