Ошибка Ole 800A03EC при использовании метода TExcelWorkBook SaveAs в Delphi 7 - PullRequest
4 голосов
/ 01 марта 2010

Я пытаюсь открыть книгу Excel 2003 и сохранить ее как-нибудь еще, например, Excel 95. Я использую следующий код:

XLSApp:=TExcelApplication.Create(Self);
XLSApp.Workbooks.Open(SomeFileName,NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,defaultlcid);
XLSWB:=TExcelWorkbook.Create(XLSApp);
XLSWB.ConnectTo(XLSApp.Workbooks.Item[1]);
XLSWB.SaveCopyAs(ExtractFilePath(edTable.Text)+'temp.xls');
XLSWB.SaveAs(SomeOtherFileName,xlExcel7,EmptyParam,EmptyParam,False,False,xlNoChange,xlUserResolution,False,EmptyParam,EmptyParam,EmptyParam,DefaultLCID);

К сожалению, этот код дает "Ole 800A03EC" на клиентском компьютере, в то время как он работает на моем. Обратите внимание, что у меня установлен Office 2007, и у него есть Office 2003 SP3.

Любая помощь будет принята с благодарностью.

Ответы [ 5 ]

9 голосов
/ 01 марта 2010

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

Так вот что происходит у вашего клиента (я думаю):

  • Ваш клиент имеет открытую Excel и редактирование ячейки (выберите ячейку и нажмите F2)
  • Ваш код начинается:
    • Вы создаете TExcelApplication и получаете доступ к свойству Workbooks. Поскольку ваше приложение Excel еще не подключено, оно вызывает TOleServer.Connect (посмотрите на реализацию GetDefaultInterface)
    • Поскольку connectkind по умолчанию - ckRunningOrNew, TExcelApplication подключается к работающему экземпляру.
    • Поскольку клиент редактирует ячейку, вы получаете ошибку в методе Open.

Как это можно предотвратить: установите ConnectKind вашего TExcelApplication на ckNewInstance, чтобы вы всегда работали в отдельном экземпляре Excel.

2 голосов
/ 26 ноября 2013

800A03EC также происходит, когда кто-то (например, я) делает глупую вещь, например пытается загрузить в ячейку Excel, которая не существует, например:

excel.Cells[rowIndex, ri] = x;
where ri is 0.

ПРИМЕЧАНИЕ БЕН: индекс colначинается с 1, а не с 0.

1 голос
/ 29 июня 2012

В моем случае (формат xlExcel8):

Вместо:

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel8);

Я использовал:

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName);

или

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel7);

Оба работают хорошо ... И да, я знаю, что это глупое решение, но оно работает!

1 голос
/ 01 марта 2010

OLE 800A03EC обычно имеет отношение к недопустимым символам в вашем файле Excel. Используете ли вы те же данные, что и ваш клиент? Есть ли разница в региональных настройках? И т. Д. И т. Д. Для этого может быть несколько ошибок, но, скорее всего (как сказал мне быстрый гугл), это региональная настройка.

0 голосов
/ 23 ноября 2016

Я получаю эту ошибку при попытке сохранить слишком много данных в WorkSheet (через Delphi)

...