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

时间:2019-04-09 14:03:12

标签: excel delphi ole

我正在尝试将Delphi应用程序中的数据另存为excel文件。 我使用OLEobject,但有一个Excel进程保持打开的问题。

我需要其他工作表,并且取决于我如何添加它们,该过程是否将关闭。 查看代码。

关闭我的应用程序后,excel进程将始终关闭(但不会更早)。 代码version1在哪里出现问题?

顺便说一句。我使用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;

1 个答案:

答案 0 :(得分:0)

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

代替

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

(从MS VBA帮助改编而成) (https://docs.microsoft.com/de-de/office/vba/api/excel.sheets.add

我必须使用

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