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