为什么OLE对象退出后Excel进程保持打开状态?
我试图将Delphi应用程序中的数据保存为excel文件。 我使用OLEobject,但存在Excel进程保持打开的问题 我需要额外的工作表,根据我添加工作表的方式,该流程将关闭或不关闭。 请参阅代码 excel进程将始终在我关闭应用程序后关闭,但不会更早关闭。 代码版本1的问题在哪里 顺便说一句,我使用Delphi10.2.3和Excel2010,Windows7为什么OLE对象退出后Excel进程保持打开状态?,excel,delphi,ole,Excel,Delphi,Ole,我试图将Delphi应用程序中的数据保存为excel文件。 我使用OLEobject,但存在Excel进程保持打开的问题 我需要额外的工作表,根据我添加工作表的方式,该流程将关闭或不关闭。 请参阅代码 excel进程将始终在我关闭应用程序后关闭,但不会更早关闭。 代码版本1的问题在哪里 顺便说一句,我使用Delphi10.2.3和Excel2010,Windows7 var lExcel : OLEVariant; lMyWorkbook : OLEVariant;
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帮助改编的
我必须使用
LastWorkSheet := lMyWorkbook.Worksheets[ lMyWorkSheets.Count ];
lMyWorkSheets.Add( After := LastWorkSheet );
FWIW,我不能复制这个问题。我使用的是Delphi XE7、Excel 2007和Win 7I,我也使用Excel 2013进行了测试,遇到了相同的问题,所以我猜是Delphi的较新版本导致了这个问题。