いつもお世話になっております、macと申します。
VC++6.0で作成した実行モジュールから、エクセルデータを保存する
プログラムを作成しております。
そこで、シートに画像を貼り付けるために以下のコードを追加しました。
-- ここから --------------------------
// エクセルの作成
if(!m_excelApp.CreateDispatch(Excel.Application)){
AfxMessageBox(Excel オブジェクトを取得できませんでした。);
return -1;
}
m_excelApp.SetVisible(false);
m_excelApp.SetDisplayAlerts(false);
// Workbooksオブジェクトの取得
m_xlWorkbooks = m_excelApp.GetWorkbooks();
// BOOKの追加
m_xlWorkbook = m_xlWorkbooks.Add(vtOptional);
// Sheetsオブジェクトの設定
m_xlWorksheets = m_xlWorkbook.GetSheets();
// Sheetの取得
m_xlWorksheet = m_xlWorksheets.GetItem(COleVariant((short)1));
// シェイプの取得
m_xlShapes = m_xlWorksheet.GetShapes();
// 範囲の取得
m_xlRange = m_xlWorksheet.GetRange(COleVariant(B1), COleVariant(B1));
COleVariant l = m_xlRange.GetLeft();
COleVariant t = m_xlRange.GetTop();
COleVariant w = m_xlRange.GetWidth();
COleVariant h = m_xlRange.GetHeight();
// 画像貼り付け
m_xlShapes.AddPicture(F:\\img.jpg, msoTrue, msoTrue, (float)l.dblVal, (float)
t.dblVal, (float)w.dblVal, (float)h.dblVal);
// 保存
m_xlWorkbook.SaveAs(COleVariant(strPath), vtOptional, vtOptional, vtOptional,
vtOptional, vtOptional, 0, vtOptional, vtOptional, vtOptional, vtOptional);
// BOOKを閉じる
m_xlWorkbook.Close(vtOptional, COleVariant(strPath), vtOptional);
m_xlWorkbook.ReleaseDispatch();
m_xlWorkbooks.ReleaseDispatch();
// Applicationを閉じる
m_excelApp.Quit();
m_excelApp.ReleaseDispatch();
-- ここまで --------------------------
Applicationを閉じているはずなのに、タスクマネージャにエクセルのプロセスが
残っていてます。
「画像貼り付け」の一行をコメントにすると、Applicationの終了と同時に
プロセスが消えます。
なぜ、プロセスが残ってしまうのでしょうか?
どなたかご教授お願いします。
開発環境
Windows XP VC++6.0 Excel2000
WinXp SP2 Pro
VC++6.0 SP6 Sta
Excel 2003 SP2 Per
でメンバ変数(m_xlWorkbooksら)は全てローカル変数にして、
上記のコードを試してみましたが、
> Applicationを閉じているはずなのに、タスクマネージャにエクセルのプロセスが
> 残っていてます。
の現象は起きませんでした。
その現象が起こる最小限のコードにして、再度試してみてはいかかでしょうか?
> の現象は起きませんでした。
はすいません勘違いでした。
アプリを終了させないと Excel のプロセスはなくなりませんね。
いちおう参考にならないかもしれませんが、
VBからExcelなどを使ったときのプロセス関連のサイトです。
消えないExcelのプロセス
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm
Excelのマクロ記録では、
ActiveSheet.Pictures.Insert(E:\aaa.gif).Select
となったので、挿入してから移動させるようにするのかなぁと思ったけど、
WorkSheetからPicturesをどうやって取得するかわからなかった。。。
Blue様、回答ありがとうございます。
教えていただいたサイトを見てみましたが、そこにある全ての処理は追加してある
つもりです。
また、ExcelのマクロにあるPicturesの取得も調べてみましたが、
どのように取得するのか分かりませんでした。
(Blue様と一緒)
ですので、Applicationを閉じた後で、プロセスを強制終了するようにします。