Ich habe ein Delphi-Programm geschrieben, das Daten aus mehreren verschiedenen Tabellenkalkulationen einer einzigen XLS-Datei extrahiert und in eine Textdatei für die spätere Verarbeitung zusammenführt. Es ist ein Delphi 7 Konsole Programm.
Ein Auszug aus den wichtigsten Teilen des Codes zeigt Ihnen, dass sich mein Programm anscheinend ziemlich gut verhält oder zumindest so gut, wie es sein muss.
uses ... ActiveX, ComObj ... ;
procedure Fatal(s:string);
...
Halt(1);
var ExcelApp:Variant; (* global var *)
begin (* main program block *)
coInitialize(nil);
ExcelApp:=CreateOleObject('Excel.Application');
try
ExcelApp.Visible:=False;
ExcelApp.WorkBooks.Open(ExcelFileName);
...
XLSSheet := ExcelApp.Worksheets[ExcelSheetName];
...
try
XLSRange := XLSSheet.Range[ExcelRangeName];
except
Fatal('Range "'+ExcelRangeName+'" not found');
end;
if VarIsNull(XLSRange) then Fatal('Range '+ExcelRangeName+' not found');
for row:=XLSRange.Row to XLSRange.Rows[XLSRange.Rows.Count].Row do
for col:=XLSRange.Column to XLSRange.Columns[XLSRange.Columns.Count].Column do
CellValue:=XLSSheet.Cells[Row,Col].Value;
...
if CellValue<>'' then ...
...
ExcelApp.Workbooks.Close;
...
finally
ExcelApp.Quit;
coUninitialize;
end;
end.
Manchmal, wenn das Programm beendet wird, bleibt die XLS-Datei gesperrt. Ein Blick in den Task-Manager zeigt, dass der Prozess Excel.exe, der beim Ausführen des Client-Programms gestartet wurde, immer noch läuft, obwohl das Client-Programm beendet und erfolgreich entladen wurde.
Wissen Sie zufällig, was die üblichen Verdächtigen für dieses Verhalten sind? Haben Sie eine Idee, wo man nachschauen kann, ob Excel bei der Clientausführung immer entladen wird?