Question

I have console Delphi application which works with Excell though OLE.

The examle of code is pretty simple

            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;

When I run this application in interactive mode (by myself) it wors perfect. But when I try to run it through standart Microsoft Scheduler I see in log of my applications such records:

21:41:40.523: EOleSysError: Отказано в доступе, ProgID: "Excel.Application" (Access denied from Russian)

If I set in schedule task option "Run with highest privileges" I see in log of my applications such records:

20:12:04.475: EOleException: Метод SaveAs из класса Workbook завершен неверно (SaveAs method of Workbook class finished incorrectly from Russian)

Is there any way to run application with OLE call through Microsort Scheduler?

Or maybe I can work with Excel without OLE (it's pretty simple operations as you could see in my examle)? How can I do it?

Was it helpful?

Solution

The fundamental issue is that Excel needs to run in an interactive desktop. Running through the task scheduler, as you have configured it, runs it in a non-interactive desktop. That's not a supported mode of operation for Excel: http://support.microsoft.com/kb/257757

Your only real hope of success is to create the Excel file without using COM automation of Excel. There are many libraries to help you do that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top