Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TExcelApplication.Free - Wann wird Excel-Prozess beendet? (https://www.delphipraxis.net/130048-texcelapplication-free-wann-wird-excel-prozess-beendet.html)

tr909 2. Mär 2009 14:04


TExcelApplication.Free - Wann wird Excel-Prozess beendet?
 
Moin. Ich bin vorhin mal über folgendes gestoßen. Ich öffne mit TExcelApplication eine xls-datei und bearbeite sie etwas. Danach speicher ich die Datei unter neuem Namen und geben ich alles wieder frei. Funktioniert so weit auch ganz gut.
Delphi-Quellcode:
ExcelApplication0 := TExcelApplication.Create(NIL);
ExcelWorkbook0    := TExcelWorkbook.Create(NIL);
ExcelWorksheet0   := TExcelWorksheet.Create(NIL);

weitere Code...

ExcelWorksheet0.SaveAs(filename);
ExcelWorksheet0.Disconnect;
ExcelWorksheet0.Free;
ExcelWorkbook0.Close(False);
ExcelWorkbook0.Disconnect;
ExcelWorkbook0.Free;
ExcelApplication0.Quit;
ExcelApplication0.Disconnect;
ExcelApplication0.Free;
Wenn ich nun anschlißen die Datei per ShellExecute öffnen möchte, stürzt Excel ab (wenn man es danach direkt selbst neu starten lässt, öffnet sich die Datei problemlos.
Delphi-Quellcode:
...
ExcelApplication0.Disconnect;
ExcelApplication0.Free;
ShellExecute(Handle,'open',PChar(filename),nil,nil,1)
Hab nun herausgefunden, das der excel-Prozess noch läuft, wenn ich die Datei öffnen möchte, und es deshalb kracht. Habe danach auch schon versucht hinter ExcelApplication0.Free ein Delay zu setzen, aber es hat nichts gebracht.

Wenn ich den o.a. Code jedoch in eine extra Prozedur (hier UpdateExcel) schreibe und diese dann aufrufe, kann ich danach ohne Problem direkt die Datei öffnen, weil der excel-Prozess direkt nach abarbeiten der Prozedur beendet wird.

Delphi-Quellcode:
UpdateExcel (edQuery.text);
ShellExecute(Handle,'open',PChar(filename),nil,nil,1)
Kann mir jemand erklären woran das liegt?

Gruß
tr909

hoika 2. Mär 2009 14:13

Re: TExcelApplication.Free - Wann wird Excel-Prozess beendet
 
Hallo,

die gleichen Probleme hatte ich auch.
Deine Lösung werde ich doch gleich mal einbauen ... ;)

Das Problem könnte an den Interfaces liegen,
sie sind solange gültig, wie die Variable gültig (im Sinne des Compilers -> Scope) ist,
also ein Free reicht nicht.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz