1

ここで説明されているように、Delphi 2007 の ExcelXP コンポーネントを使用して、MS Excel に接続し、ワークシートのいくつかのフィールドにデータを入力しています。それは正常に機能し、必要に応じてワークシートを変更できます。

ただし、Excel で開いているワークシートがある場合に限り、アプリケーションの終了後も Excel を開いたままにしておきます。開いているブックの数は で取得できるExcelApplication.Workbooks.Countので、アプリケーション終了時にブックが開いているかどうかを確認したり、途中で Excel を閉じたりするのは簡単OnDestroyです。

現在、アプリケーションが終了するとすぐに開いているワークブックがあるかどうかに関係なく、Excel が終了する状況に陥っています。.Disconnectまたは呼び出しによるものではありません.Quitが、それらをすべて取り出してもまだそうです。アプリケーションを閉じるとすぐに Excel が閉じます。

開いているワークブックがある場合に Excel を開いたままにし、何もない場合に Excel を閉じる方法を知っている人はいますか?

更新: AutoQuitTExcelApplication のプロパティが に設定されましたTrue。それがずっと問題だったことが判明しました。

4

2 に答える 2

2

次のDeborah Pate のページは、Delphi オブジェクトが参照していない場合、ExcelXP が Excel を自動的に閉じることを示唆しています。MS Interop コンポーネントの問題ではありません。

ただし、ワークブックとワークシートの変数をすべて解放しない限り、Excel はメモリ内でハングアップし、目に見えない状態で実行されることに注意してください。これを防ぐには、すべてのコンポーネントを切断し、インターフェイス変数を nil に設定し、バリアントを Unassigned に設定します。

于 2013-03-20T09:56:11.990 に答える
2

私の質問に答えて、私の同僚は TExcelApplication コンポーネントにAutoQuitプロパティがあることに気付きました。に設定するとFalse、Excel は開いたままになります。OnDestroyこれで、イベントで Excel を手動で終了/切断できるようになりました。

于 2013-03-20T10:00:21.247 に答える