初めて書き込ませていただきます。
VC++初心者のBANと申します。
VC++でExcelを出力する以下のようなプログラムを作成しました。
//Excelの起動
pXL.CreateInstance(LExcel.Application);
pXL->Visible = TRUE;
WorkbooksPtr pBooks = pXL->Workbooks;
//雛形のエクセルをオープンする
_WorkbookPtr pBookH = pBooks->Open(C:\\aaa.xls);
//1シート目をコピーする。
_WorksheetPtr pSheetsH = pBookH->Worksheets->Item[COleVariant((short)1)];
//WorkBookを追加する
_WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
//1シート目の後ろにコピーする
_WorksheetPtr pSheets = pBook->Worksheets->Item[COleVariant((short)1)];
pDisp.vt = VT_DISPATCH;
pDisp.pdispVal = pSheets;
//シートのコピー
pSheetsH->Copy(vtMissing, pDisp);
pBook->SaveAs(c:\\temp\\bbb.xls, (long)xlExcel9795, vtMissing, vtMissing,
vtMissing, vtMissing, xlExclusive);
//Excelを閉じる
pXL->Quit();
pDisp.vt = VT_EMPTY;
pXL->Quit()しているのにも関わらず、Excelのプロセスが残ってしまうことがありま
す。
そこで、pXL->Quit後、Excelのプロセスが残っていたら、Excelを強制終了しようと考え
ていますが、方法が解りません。
どなたが、ご存知の方がいらっしゃれば、ご教授願います。
開発環境は VC++6.0 Excel 2000です。
よろしくお願いいたします。
> そこで、pXL->Quit後、Excelのプロセスが残っていたら、Excelを強制終了しようと考え
> ていますが、方法が解りません。
その前に、開きっぱなしの Wookbook を閉じるなど、
正常に終了させる方法を探ってみてはいかがでしょう。
#ExcelはOLEサーバーとして動作しますので、
#アプリ(UI)の終了=プロセス終了とはならなかったような
#記憶があります。
dairygoodsさんレスありがとうござます。
>その前に、開きっぱなしの Wookbook を閉じるなど、
>正常に終了させる方法を探ってみてはいかがでしょう。
書き忘れていましたが、pBooks->Close()をpXL->Quit()の前に実行しています。
処理を見直しますが、Excelの強制終了方法がお解りのかたがいらっしゃいましたらご教
授願います。
追記です。
現在は、Excelプロセスが残ってしまう現象は発生していませんが
発生しなくなった理由が解らす、またいつ発生するか不安ですので
強制終了することを思いつきました。
皆様方の中で私と同じような現象を経験した方がいらっしゃれば
対策方法をご教授願います。
強制終了をするよりも
Exelのメインウィンドウを取得して
WM_CLOSEを投げてあげたらどうでしょう。
少なくともTerminateProcessするよりは
いいとおもいます。