2014-01-30 2 views
1

У меня есть консольное приложение Delphi, которое работает с Excell, хотя OLE.Delphi, OLE и проблемы с Microsoft Scheduler

нелогич- кода довольно прост

  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; 

Когда я запускаю это приложение в интерактивном режиме (сам) он WORS совершенным. Но когда я пытаюсь запустить его через стандартного Microsoft Scheduler я вижу в журнале моих приложений такие записи:

21: 41: 40,523: EOleSysError: Отказано в доступе, Progid: «Excel.Application» (отказано в доступе с русского)

Если я устанавливаю в расписании вариант задачи "Выполнить с наивысшими правами" Я вижу в журнале моих приложений такие записи:

20: 12: 04.475: EOleException: метод SaveAs из класса Workbook завершен метод неверно (SaveAs класса рабочей книги неправильно с русского)

Есть ли способ запустить приложение с вызовом OLE через Microsort Scheduler?

Возможно, я могу работать с Excel без OLE (это довольно простые операции, как вы могли видеть на моем примере)? Как мне это сделать?

ответ

1

Основная проблема заключается в том, что Excel необходимо запускать на интерактивном рабочем столе. Запуск через планировщик задач, как вы его настроили, запускает его на неинтерактивном рабочем столе. Это не поддерживаемый режим работы для Excel: http://support.microsoft.com/kb/257757

Ваша единственная реальная надежда на успех - создать файл Excel без использования автоматизации COM Excel. Есть много библиотек, которые помогут вам в этом.

+0

Спасибо, Дэвид. У вас есть пример библиотеки для использования с Delphi? –

+0

Я лично использую DevExpress ExpressSpreadsheet, который является визуальным контролем, но я бы не рекомендовал его. Нам пришлось переписать большие части. Лучшая библиотека - Aspose. Это библиотека .net. Я уверен, что если вы выполните какой-либо веб-поиск, вы найдете то, что вам нужно. –

Смежные вопросы