Уточнение, ошибка пропадает если включить опцию Background...
в чем тут дело, просто хотелось бы побыстре скинуть в Excel набор данных и лишние телодвижения при этом не нужны.
Форматируй NULL'ы в пустые строки.
А вообще если тебе нужен отчет в Excel, то делать отчет в FastReport, а потом экпортировать его в Excel - это преступление. Хотя конечно, от дишней работы тебя как прогрммиста избавит.
Если есть время и мозги позволяют, то пиши сразу в Excel.
У меня это ошибка появлялась при первом же обращении к объекту TfrxXLSExport.FExcel (unit frxExportXLS procedure TfrxXLSExport.ExportPage;). Он просто не был инициализирован в процедуре procedure TfrxExcel.OpenExcel. Там возникало исключение EOleSysError "CoInitialize has not been called" на строчке Excel := CreateOLEObject('Excel.Application'); Это исключение успешно отлавливалось, присваивалось FIsOpened := False и экспорт почему то дальше продолжал выполнятся, естественно до первой попытки обращения к FExcel.
Поставил CoInitialize(nil);
перед выполнением
frxReport1.ShowReport;
Экспорт Excel(OLE) заработал.
На мой взгляд, это все не очень хорошо. И хотелось бы узнать причину проблемы.
А что непонятного? Тебе же в сообщении об ошибке все сказано!
Только мне кажется, что нужно не от nil'a это делать, а с привязкой к чему нибудь (к самому отчету, например), или хотя бы вручную его грохать (или вызвать соответствующий деструктор или что-то подобное).
Это ежу ясно, что надо CoUninitialize потом вызывать Это к делу не относится.
И вообще-то все понятно, просто хочется помочь разработчикам
поскольку:
1. Об этой маленькой проблемке не написано в мануалах и соответственно приходится залезать в код, в который залезать не хочется. Хотя ситуация штатная.
2. Если уж CreateOLEObject('Excel.Application') не отработал, то почему отчет дальше работает, и потом выдает невразумительные ошибки, вместо вразумительных.
3. и нельзя ли это CoInitialize куда-нибудь запихать внутрь unit frxExportXLS.
4. и я вообще не понимаю, в каих случаях экспорт работает, даже без вызова CoInitialize.
Так что, видимо, уважаемый Рустам, вопросы совсем не к вам.
Вазможна... Но что-то разработчики молчат.
Короче ИМХО на твои пункты 2 и 3 думаю, сеть причины.
А так... Если проблемы как таковой нет - решается проблема (если ее вообще можно так назвать) одной строчкой, то...
Комментарии
в чем тут дело, просто хотелось бы побыстре скинуть в Excel набор данных и лишние телодвижения при этом не нужны.
А вообще если тебе нужен отчет в Excel, то делать отчет в FastReport, а потом экпортировать его в Excel - это преступление. Хотя конечно, от дишней работы тебя как прогрммиста избавит.
Если есть время и мозги позволяют, то пиши сразу в Excel.
Поставил
CoInitialize(nil);
перед выполнением
frxReport1.ShowReport;
Экспорт Excel(OLE) заработал.
На мой взгляд, это все не очень хорошо. И хотелось бы узнать причину проблемы.
(WinXP SP2, "Excel 2000", "Excel 2003", Delphi7, "FastReport 3.11" )
Только мне кажется, что нужно не от nil'a это делать, а с привязкой к чему нибудь (к самому отчету, например), или хотя бы вручную его грохать (или вызвать соответствующий деструктор или что-то подобное).
И вообще-то все понятно, просто хочется помочь разработчикам
поскольку:
1. Об этой маленькой проблемке не написано в мануалах и соответственно приходится залезать в код, в который залезать не хочется. Хотя ситуация штатная.
2. Если уж CreateOLEObject('Excel.Application') не отработал, то почему отчет дальше работает, и потом выдает невразумительные ошибки, вместо вразумительных.
3. и нельзя ли это CoInitialize куда-нибудь запихать внутрь unit frxExportXLS.
4. и я вообще не понимаю, в каих случаях экспорт работает, даже без вызова CoInitialize.
Так что, видимо, уважаемый Рустам, вопросы совсем не к вам.
Короче ИМХО на твои пункты 2 и 3 думаю, сеть причины.
А так... Если проблемы как таковой нет - решается проблема (если ее вообще можно так назвать) одной строчкой, то...