我有控制台Delphi应用程序,它通过OLE与Excell一起使用。
代码检查非常简单
procedure SaveBaseRecordsToFile(BaseName: string; PaymentRecords: TPaymentRecords);
var
i: integer;
Excel: Variant;
begin
try
Excel:=CreateOleObject('Excel.Application');
Excel.DisplayAlerts:=False;
except
on E: Exception do begin
LogWriter.WriteLog(E.ClassName + ': ' + E.Message);
exit;
end;
end;
try
Excel.Workbooks.Add;
//Excel.Worksheets.Add;
Excel.Worksheets[1].Cells[2, 1].Value := 'Account number';
Excel.Worksheets[1].Cells[2, 2].Value := 'Sum';
for i := 0 to Length(PaymentRecords) - 1 do begin
Excel.Worksheets[1].Cells[i + 3, 1].Value := PaymentRecords[i].NUMBER;
Excel.Worksheets[1].Cells[i + 3, 2].Value := PaymentRecords[i].SUMMA;
end;
Excel.ActiveSheet.Name := 'SHEET1';
Excel.Application.Workbooks[1].SaveAs(ExtractFilePath(ParamStr(0)) + BaseName + '.xls', 56);
Excel.Workbooks.Close;
Excel.Quit;
finally
Excel := Unassigned;
end;
end;
当我以交互模式(由我自己)运行此应用程序时,它非常完美。 但是当我尝试通过标准的Microsoft Scheduler运行它时,我在我的应用程序的日志中看到了这样的记录:
21:41:40.523:EOleSysError:Отказановдоступе,ProgID:“Excel.Application”(俄语访问被拒绝)
如果我在计划任务选项中设置“以最高权限运行”,我会在我的应用程序的日志中看到这样的记录:
20:12:04.475:EOleException:МетодSaveAsизклассаWorkbookзавершенневерно(保存作为工作簿类的方法从俄语错误地完成)
有没有办法通过Microsort Scheduler运行OLE调用应用程序?
或许我可以在没有OLE的情况下使用Excel(这在我的考试中可以看到非常简单的操作)?我该怎么办?
答案 0 :(得分:1)
基本问题是Excel需要在交互式桌面上运行。正如您配置的那样,在任务计划程序中运行它,在非交互式桌面中运行它。这不是Excel支持的操作模式:http://support.microsoft.com/kb/257757
您唯一真正的成功希望是在不使用Excel的COM自动化的情况下创建Excel文件。有许多库可以帮助您实现这一目标。