为什么在 OLE 对象退出后保持 Excel 进程打开状态



我正在尝试将Delphi应用程序中的数据保存为excel文件。我使用 OLE对象,但遇到 Excel 进程保持打开状态的问题。

我需要额外的工作表,根据我添加它们的方式,该过程将关闭或不关闭。请参阅代码。

在我关闭应用程序后(但不是更早(,excel 进程将始终关闭。代码版本 1 的问题在哪里?

顺便说一句。我使用 Delphi 10.2.3 & Excel 2010, Windows 7

var
  lExcel        : OLEVariant;
  lMyWorkbook   : OLEVariant;
  lMyWorkSheets : OLEVariant;
begin
  try
    lExcel := CreateOleObject('Excel.Application');
  except
    exit;
  end;
  lExcel.visible := true;
  lMyWorkbook   := lExcel.Workbooks.Add;
  lMyWorkSheets := lMyWorkbook.WorkSheets;
  //adding another worksheet 
  //version1 - insert at the end of the list 
  //the excel process stays open after quit
  lMyWorkSheets.Add( After:=lMyWorkbook.Worksheets[ lMyWorkSheets.Count ] );
  //version2 - insert before active worksheet
  //the excel process will be closed after quit
  lMyWorkSheets.Add;

  lMyWorkSheets:=unassigned;
  lMyWorkbook.Close;
  lMyWorkbook:=unassigned;
  lExcel.Quit;
  lExcel:=unassigned;
end;

通过反复试验,我找到了解决问题的方法:

而不是

lMyWorkSheets.Add( After:=lMyWorkbook.Worksheets[ lMyWorkSheets.Count ] );

改编自 MS VBA 帮助(https://learn.microsoft.com/de-de/office/vba/api/excel.sheets.add(

我必须使用

LastWorkSheet := lMyWorkbook.Worksheets[ lMyWorkSheets.Count ];
lMyWorkSheets.Add( After := LastWorkSheet );

最新更新