Excelのプロセスが残ってしまう

[戻る]
BAN 2005/04/07(木) 11:59:52
初めて書き込ませていただきます。
VC++初心者のBANと申します。

VC++でExcelを出力する以下のようなプログラムを作成しました。

//Excelの起動
 pXL.CreateInstance(L"Excel.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です。
よろしくお願いいたします。

dairygoods 2005/04/07(木) 12:17:33
> そこで、pXL->Quit後、Excelのプロセスが残っていたら、Excelを強制終了しようと考え
> ていますが、方法が解りません。

その前に、開きっぱなしの Wookbook を閉じるなど、
正常に終了させる方法を探ってみてはいかがでしょう。

#ExcelはOLEサーバーとして動作しますので、
#アプリ(UI)の終了=プロセス終了とはならなかったような
#記憶があります。

BAN 2005/04/07(木) 13:11:15
dairygoodsさんレスありがとうござます。

>その前に、開きっぱなしの Wookbook を閉じるなど、
>正常に終了させる方法を探ってみてはいかがでしょう。
書き忘れていましたが、pBooks->Close()をpXL->Quit()の前に実行しています。
処理を見直しますが、Excelの強制終了方法がお解りのかたがいらっしゃいましたらご教
授願います。

BAN 2005/04/08(金) 11:31:15
追記です。
現在は、Excelプロセスが残ってしまう現象は発生していませんが
発生しなくなった理由が解らす、またいつ発生するか不安ですので
強制終了することを思いつきました。
皆様方の中で私と同じような現象を経験した方がいらっしゃれば
対策方法をご教授願います。

FAY 2005/04/10(日) 15:36:24
強制終了をするよりも
Exelのメインウィンドウを取得して
WM_CLOSEを投げてあげたらどうでしょう。

少なくともTerminateProcessするよりは
いいとおもいます。

古いスレッドには追加発言できません。