Корректное завершение процесса 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;