8 Stimmen

Gründe, warum excel.exe nach dem Ausführen eines Delphi-Client-Automatisierungsprogramms geladen bleibt?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X