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