環境
・Delphi7 Professional
・Office XP
-----------------------
ACCESSよりデータを抽出し、Delphiにより集計を施し、
EXCELに吐き出すアプリを製作中です。
問題点:
以下のようにEXCELを起動させ、自作のEXCELの閉じるボタンではなく、EXCELのウィンドウの閉じるボタンで終了をさせたところ、不具合が起きます。
type
TForm1 = class(TForm)
Excel: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
{省略}
FileName := GetCurrentDir + PathDelim + 'fixed_style.xls';
lcid := GetUserDefaultLCID;
Excel.Workbooks.Open(FileName,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
lcid);
Excel.Visible[lcid] := true;
ExcelWorkBook1.ConnectTo(Excel.Workbooks[1] as _Workbook);
ExcelWorkSheet1.ConnectTo(Excel.Worksheets['Sheet1'] as _WorkSheet);
{省略}
procedure TForm1.Button2Click(Sender: TObject);
begin
Excel.Quit;
end;
不具合:
次回、再びEXCELを起動させると、内容が表示されない。
タスクマネージャにてプロセスを調べたところ、先ほどEXCELのウィンドウ
の閉じるボタンで終了させたのにも関わらず、"EXCEL.EXE"が起動したまま
になっていました。
ご返答できる方がいましたら、よろしくお願い致します。
ExcelClassのユニットがあります、もしよかったら使用してください。
Excelも閉じることが出来ます
to LupinⅢさん
返答ありがとうございます。さっそく試してみます。
上記のLupinⅢさんの方法では確かに終了はされますが、やはり表向きで
あり、バックグランドではプロセスは生成されたままになっていました。
普遍的にEXCELを起動し、終了させるとプロセスも同時に開放されるので
やはり、Delphiで操作する際でもプロセスが生成されたままだとまずいで
すよね。。。
プログラム上からExcelを終了させても同じでしょうか?
編集 削除> HOtaさん
上記のプログラムにおいて
{省略}
procedure TForm1.Button2Click(Sender: TObject);
begin
Excel.Quit;
end;
{省略}
の部分がEXCEL終了操作の全てですが、この処理でもやはりプロセスは
バックグラウンドで消滅していません。
> この処理でもやはりプロセスはバックグラウンドで消滅していません。
Disconnectをしていないから、ということはないですか?
間違っていたらすみません。
> ふぐちゃん様
と、いいますと?
プログラムの一部を載せていただけると助かります。
> プログラムの一部を載せていただけると助かります。
Quitだけですと、Connectの状態はまだ継続しているのではないかと思ったのです。
procedure TForm1.Button2Click(Sender: TObject);
begin
Excel.Quit;
Excel.Disconnect;
end;
少しでもヒントになればよいのですが。
> ふぐちゃん様
早速実行したところ以下のエラーが表示されました。
メソッド'Disconnect'はオートメーションオブジェクトでサポートしていません.
ちなみに
ExcelはVariant型です。
BookやSheetもExcelも解放しないと残りますね。
編集 削除myWorkSheet := unAssigned;
myWorkBook := unAssigned;
myExcel.Quit;
myExcel := unAssigned;
にて全てが解放され、プロセスも完全に消滅しました。
LupinⅢ様、HOta様、ふぐちゃん様、どうもありがとうございました!!
問題解決しました。
編集 削除