Excelのプロセスが残る – プログラミング – Home

通知
すべてクリア

[解決済] Excelのプロセスが残る


mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

いつもお世話になっております、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


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

WinXp SP2 Pro
VC++6.0 SP6 Sta
Excel 2003 SP2 Per

でメンバ変数(m_xlWorkbooksら)は全てローカル変数にして、
上記のコードを試してみましたが、
> Applicationを閉じているはずなのに、タスクマネージャにエクセルのプロセスが
> 残っていてます。
の現象は起きませんでした。

その現象が起こる最小限のコードにして、再度試してみてはいかかでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> の現象は起きませんでした。
はすいません勘違いでした。

アプリを終了させないと Excel のプロセスはなくなりませんね。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

いちおう参考にならないかもしれませんが、
VBからExcelなどを使ったときのプロセス関連のサイトです。

消えないExcelのプロセス
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm

Excelのマクロ記録では、

ActiveSheet.Pictures.Insert(E:\aaa.gif).Select

となったので、挿入してから移動させるようにするのかなぁと思ったけど、
WorkSheetからPicturesをどうやって取得するかわからなかった。。。


返信引用
mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

Blue様、回答ありがとうございます。

教えていただいたサイトを見てみましたが、そこにある全ての処理は追加してある
つもりです。
また、ExcelのマクロにあるPicturesの取得も調べてみましたが、
どのように取得するのか分かりませんでした。
(Blue様と一緒)

ですので、Applicationを閉じた後で、プロセスを強制終了するようにします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました