Экспорт в Exсel

LexLex
отредактировано 14:56 Раздел: FastReport 3.0
При экспорте в Excel если в наборе данных есть Null значения стабильно выдает Invalid Variant Operation.

Комментарии

  • LexLex
    отредактировано April 2005
    Уточнение, ошибка пропадает если включить опцию Background...
    в чем тут дело, просто хотелось бы побыстре скинуть в Excel набор данных и лишние телодвижения при этом не нужны.
  • отредактировано 14:56
    Форматируй NULL'ы в пустые строки.
    А вообще если тебе нужен отчет в Excel, то делать отчет в FastReport, а потом экпортировать его в Excel - это преступление. Хотя конечно, от дишней работы тебя как прогрммиста избавит.
    Если есть время и мозги позволяют, то пиши сразу в Excel.
  • LexLex
    отредактировано 14:56
    написал:
    Форматируй NULL'ы в пустые строки.
    Null в пустые строки в хранимой процедуре переделать нельзя, там свои сложности. А в самом отчете во всех MemoView такой текст:
    [IIF(<frxDataSet."Field1"> = Null,'',<frxDataSet."Field1">)]
    
    написал:
    А вообще если тебе нужен отчет в Excel, то делать отчет в FastReport, а потом экпортировать его в Excel - это преступление.
    Отчет нужен как превью печати с возможность сбросить в Excel без форматирования.
  • отредактировано 14:56
    У меня такая ошибка при экспорте в Excel(OLE) появляется не смотря на то, что Null в отчете не встречается никогда.
  • отредактировано 14:56
    Значит совокупно из ваших двух утверждений можно с высокой вероятностью утверждать, что дело совсем не в NULL-ах.
  • отредактировано 14:56
    У меня это ошибка появлялась при первом же обращении к объекту 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) заработал.

    На мой взгляд, это все не очень хорошо. И хотелось бы узнать причину проблемы.

    (WinXP SP2, "Excel 2000", "Excel 2003", Delphi7, "FastReport 3.11" )




  • отредактировано 14:56
    А что непонятного? Тебе же в сообщении об ошибке все сказано!
    Только мне кажется, что нужно не от nil'a это делать, а с привязкой к чему нибудь (к самому отчету, например), или хотя бы вручную его грохать (или вызвать соответствующий деструктор или что-то подобное).
  • отредактировано 14:56
    Это ежу ясно, что надо CoUninitialize потом вызывать ;) Это к делу не относится.
    И вообще-то все понятно, просто хочется помочь разработчикам
    поскольку:
    1. Об этой маленькой проблемке не написано в мануалах и соответственно приходится залезать в код, в который залезать не хочется. Хотя ситуация штатная.
    2. Если уж CreateOLEObject('Excel.Application') не отработал, то почему отчет дальше работает, и потом выдает невразумительные ошибки, вместо вразумительных.
    3. и нельзя ли это CoInitialize куда-нибудь запихать внутрь unit frxExportXLS.
    4. и я вообще не понимаю, в каих случаях экспорт работает, даже без вызова CoInitialize.

    Так что, видимо, уважаемый Рустам, вопросы совсем не к вам.

  • отредактировано 14:56
    Вазможна... Но что-то разработчики молчат.
    Короче ИМХО на твои пункты 2 и 3 думаю, сеть причины.
    А так... Если проблемы как таковой нет - решается проблема (если ее вообще можно так назвать) одной строчкой, то... ;)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.