Delphi,OLE和Microsoft Scheduler的问题

时间:2014-01-30 05:26:12

标签: delphi ole

我有控制台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(这在我的考试中可以看到非常简单的操作)?我该怎么办?

1 个答案:

答案 0 :(得分:1)

基本问题是Excel需要在交互式桌面上运行。正如您配置的那样,在任务计划程序中运行它,在非交互式桌面中运行它。这不是Excel支持的操作模式:http://support.microsoft.com/kb/257757

您唯一真正的成功希望是在不使用Excel的COM自动化的情况下创建Excel文件。有许多库可以帮助您实现这一目标。