Корректное завершение процесса Excel

При открытии и закрытии Excel файла процесс не удаляется из диспетчера задач. Проблема заключается в том что если не брать ссылку на Range, то отрабатывает нормально и удаляется.

Тестовый пример

procedure TForm9.Button1Click(Sender: TObject);
var
  zExcel: Variant;
  zRangeMatrix: Variant;
begin
  zExcel := CreateOleObject('Excel.Application');
  try
    zExcel.Visible := False;
    zExcel.DisplayAlerts := False;
    zExcel.WorkBooks.Open('C:\DB\Report.xls');
    zRangeMatrix:= zExcel.Range['A1', zExcel.Cells.Item[1, 2]].Value; //Если без этой строчки , то все норм
  finally
    zExcel.WorkBooks.Close;
    zExcel.Quit;
    zExcel := Unassigned;
    zRangeMatrix := Unassigned;
  end;
end;

Я так понимаю надо освободить zRangeMatrix, но zRangeMatrix := Unassigned; не помогает Как корректно завершить работу Excel ?

Delphi 10, Win 8


Ответы (1 шт):

Автор решения: Osiris74

Попробуйте сохранить лист перед выходом из программы.

В дополнение приведу свой похожий код:

    //Saving log-file(called from MyComm)
  procedure TForm1.SaveToFile(FData:Variant;LogCounter:Integer);
      var
        i:Integer;
   begin

    ExcelApp:=CreateOleObject('Excel.Application');

    ExcelApp.Visible:=False;

    ExcelApp.DisplayAlerts:=False;

    ExcelApp.Application.EnableEvents:=False;

    //Open existing log-file

    try
      ExcelApp.Workbooks.Open(LogFileName(CurrDate));

      ExcelSheet:=ExcelApp.Workbooks[1].WorkSheets[1];

      //Writing to log in loop
       for i:=1 to LogCounter do
        begin
          CellCounter:=CellCounter+1;
          ExcelSheet.Cells[cellCounter,1].Value:=FData[i,1];
          ExcelSheet.Cells[cellCounter,2].Value:=FData[i,2];
        end;

      ExcelApp.WorkBooks.Item[1].SaveAs(LogFileName(CurrDate));

      finally

        ExcelApp.Quit;

        ExcelApp:=Unassigned;

        ExcelSheet:=Unassigned;
      end;

   end;
→ Ссылка