我正在尝试将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 );