我编写了一个 Delphi 程序,该程序从单个 .XLS 文件的多个不同电子表格中提取数据并将其合并到一个文本文件中以供以后处理。它是一个 Delphi 7控制台程序。
一段最相关的代码片段将向您展示,显然,我的程序表现得非常好,或者至少与它需要的一样多。
uses ... ActiveX, ComObj ... ;
procedure Fatal(s:string);
...
Halt(1);
var ExcelApp:Variant; (* global var *)
begin (* main program block *)
coInitialize(nil);
ExcelApp:=CreateOleObject('Excel.Application');
try
ExcelApp.Visible:=False;
ExcelApp.WorkBooks.Open(ExcelFileName);
...
XLSSheet := ExcelApp.Worksheets[ExcelSheetName];
...
try
XLSRange := XLSSheet.Range[ExcelRangeName];
except
Fatal('Range "'+ExcelRangeName+'" not found');
end;
if VarIsNull(XLSRange) then Fatal('Range '+ExcelRangeName+' not found');
for row:=XLSRange.Row to XLSRange.Rows[XLSRange.Rows.Count].Row do
for col:=XLSRange.Column to XLSRange.Columns[XLSRange.Columns.Count].Column do
CellValue:=XLSSheet.Cells[Row,Col].Value;
...
if CellValue<>'' then ...
...
ExcelApp.Workbooks.Close;
...
finally
ExcelApp.Quit;
coUninitialize;
end;
end.
有时,当程序退出时,XLS 仍处于锁定状态。查看任务管理器,我看到客户端程序运行时启动的 Excel.exe 进程仍在运行,即使客户端程序已退出并成功卸载。
您是否知道这种行为的常见嫌疑人是什么?知道在客户端执行时在哪里寻找总是卸载 excel 吗?