EXCEL

解決


SKJP  2004-07-01 17:26:34  No: 9729  IP: [192.*.*.*]

環境

・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"が起動したまま
になっていました。

ご返答できる方がいましたら、よろしくお願い致します。

編集 削除
LupinⅢ  URL  2004-07-02 14:00:24  No: 9730  IP: [192.*.*.*]

ExcelClassのユニットがあります、もしよかったら使用してください。
Excelも閉じることが出来ます

編集 削除
SKJP  2004-07-02 17:00:28  No: 9731  IP: [192.*.*.*]

to LupinⅢさん

返答ありがとうございます。さっそく試してみます。

編集 削除
SKJP  2004-07-04 14:14:08  No: 9732  IP: [192.*.*.*]

上記のLupinⅢさんの方法では確かに終了はされますが、やはり表向きで
あり、バックグランドではプロセスは生成されたままになっていました。
普遍的にEXCELを起動し、終了させるとプロセスも同時に開放されるので
やはり、Delphiで操作する際でもプロセスが生成されたままだとまずいで
すよね。。。

編集 削除
HOta  2004-07-04 15:59:03  No: 9733  IP: [192.*.*.*]

プログラム上からExcelを終了させても同じでしょうか?

編集 削除
SKJP  2004-07-05 10:25:45  No: 9734  IP: [192.*.*.*]

> HOtaさん

上記のプログラムにおいて

       {省略}

procedure TForm1.Button2Click(Sender: TObject);
begin
   Excel.Quit;
end;

       {省略}

の部分がEXCEL終了操作の全てですが、この処理でもやはりプロセスは
バックグラウンドで消滅していません。

編集 削除
ふぐちゃん  2004-07-05 10:47:45  No: 9735  IP: [192.*.*.*]

> この処理でもやはりプロセスはバックグラウンドで消滅していません。
Disconnectをしていないから、ということはないですか?
間違っていたらすみません。

編集 削除
SKJP  2004-07-05 11:09:10  No: 9736  IP: [192.*.*.*]

> ふぐちゃん様

と、いいますと?
プログラムの一部を載せていただけると助かります。

編集 削除
ふぐちゃん  2004-07-05 11:37:11  No: 9737  IP: [192.*.*.*]

> プログラムの一部を載せていただけると助かります。
Quitだけですと、Connectの状態はまだ継続しているのではないかと思ったのです。

procedure TForm1.Button2Click(Sender: TObject);
begin
  Excel.Quit;
  Excel.Disconnect;
end;

少しでもヒントになればよいのですが。

編集 削除
SKJP  2004-07-05 11:44:04  No: 9738  IP: [192.*.*.*]

> ふぐちゃん様

早速実行したところ以下のエラーが表示されました。

メソッド'Disconnect'はオートメーションオブジェクトでサポートしていません.

ちなみに
ExcelはVariant型です。

編集 削除
HOta  2004-07-05 12:00:28  No: 9739  IP: [192.*.*.*]

BookやSheetもExcelも解放しないと残りますね。

編集 削除
SKJP  2004-07-05 13:21:08  No: 9740  IP: [192.*.*.*]

myWorkSheet := unAssigned;
 myWorkBook := unAssigned;
 myExcel.Quit;
 myExcel := unAssigned;

にて全てが解放され、プロセスも完全に消滅しました。
LupinⅢ様、HOta様、ふぐちゃん様、どうもありがとうございました!!

編集 削除
SKJP  2004-07-05 13:21:52  No: 9741  IP: [192.*.*.*]

問題解決しました。

編集 削除