- PR -

Excelの終了を待つには

1
投稿者投稿内容
iwamiya
会議室デビュー日: 2005/03/28
投稿数: 3
投稿日時: 2005-03-28 14:55
C#.NETで開発を行っております。
Excelを起動し既存フォームを表示して操作しています。
フォームが閉じられるまで待って、
その後にガベージを開放するようにしたいのですが、
どのようにすれば良いでしょうか?

下記の "★★★終了するまで待つ★★★" の箇所についてお教え下さい。

Excel.Application oXL = null;
Excel._Workbook oWB = null;

// エクセルのオブジェクト配列 … 開放する際に使用する。
Object [] oExcelObjects = { oXL, oWB, };

oXL = new Excel.Application();

// フォーム(ワークブック)を開く
oWB = (Excel._Workbook)(oXL.Workbooks.Open( _strWorkForm,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing));

(ここで起動したフォームに対しての処理をする)

//----------------------
// エクセルの終了を待つ
//----------------------
(★★★終了するまで待つ★★★)


//-----------------------------------
// エクセルのオブジェクトを開放する。
//-----------------------------------
for ( i = 0 ; i < oExcelObjects.Length ; i++ )
{
oExcelObjects[ i ] = null;
}
GC.Collect();
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-03-28 15:11
こんにちは、じゃんぬ です。

これでしたら、COM を使うのではなく、
Process クラスを使った方が楽でしょうね。

  プロセスを起動して終了するまで待機する
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
iwamiya
会議室デビュー日: 2005/03/28
投稿数: 3
投稿日時: 2005-03-28 15:58
ご返答頂きましたプロセス起動に関しましては、確かに簡単で確実にガベージの問題も解決できると思っています。

以前は、エクセルフォーム側にVBAでロジックを持たせ、VBAでフォームの操作をするようにしていましたので、プロセス起動で終了の同期を取るようにしていました。

C#→COM→EXCELでは、遅くなってしまいますが、
直接アプリケーションから、いろいろな操作ができますし、
また、イベントも取れますので、あえて、COM経由で行っています。

起動したエクセルについては、インスタンスを保持していますので、
なんとか、イベント/プロパティ/COMの参照件数 等で、
終了同期を取りたいと考えています。

調べましたところ、フォームを閉じるボタンでのイベントはあるのですが、
EXCELが終了したタイミングで発生するイベントについては、
見つけることができませんでした。

C#→COM→EXCELで、終了同期を取る方法はないものでしょうか?

1

スキルアップ/キャリアアップ(JOB@IT)