Экспорт DOUBLE в EXCEL (OLE) +FORMAT

visor123visor123 Днепропетровск
отредактировано October 2005 Раздел: FastReport 3.0
Ошибка экспортирования форматированных в FR3 DOUBLE данных в Excel. Данные в ёкселе представлены как строки, а не как числа, что затрудняет дальнейшую работу с ними, если это нужно конечно...
Возможно ли сделать при экспортировании форматированных в FastReports чисел DOUBLE в Excel так, чтобы они в ёкселе были числами, а не текстом?
Если нельзя, то почему?

Лицензия на FR3 есть.
Версия 3.17. Изменений в 3.18 на эту тему не видел.

Комментарии

  • visor123visor123 Днепропетровск
    отредактировано 15:17
    Просто UP
    На самом деле странно, что на подобный вопрос не отвечают разработчики ;)
  • отредактировано 15:17
    Присоединяюсь к вопросу/пожеланию. Очень нужная вещь!!!
  • отредактировано 15:17
    Эту тему уже столько раз поднимали... Поиск для кого придуман?
    В двух словах - вы экспортируете результат, а результат это текст. И никакого признака формата данных там уже нет.
  • отредактировано 15:17
    Stranger написал:
    Эту тему уже столько раз поднимали... Поиск для кого придуман?
    В двух словах - вы экспортируете результат, а результат это текст. И никакого признака формата данных там уже нет.
    Stranger написал:
    Эту тему уже столько раз поднимали... Поиск для кого придуман?

    Поиск по ветке FastReport 3 не дает положительных результатов ни для "Excel", ни для "Экспорт".
    Stranger написал:
    В двух словах - вы экспортируете результат, а результат это текст. И никакого признака формата данных там уже нет.

    Для FastReport 3 абсолютно не согласен. В модуле frxExportXLS в методе ExportPage идет перебор объектов типа TfrxIEMObject и собственно формируется массив значений ExlArray. Класс TfrxIEMObject содержит информацию о формате данных, ее и можно использовать.

    Вот в массив передаются как раз строковые значения, но возможно есть способ для задания формата элементов этого массива? Или перебора полей уже в Excel? При переборе конечно скорость сильно упадет, но она будет однозначно выше, чем когда люди вручную меняют формат ячеек в многостраничных отчетах...
  • отредактировано 15:17
    Сколько работаю с экспортом в Ёксель, столько удивляюсь его (Ёкселя) неожиданным глюкам. Обычно он неправильно распознает число при:
    - использовании разделителей тысяч
    - использовании разделителя дробной части, не совпадающего с системными настройками
    - определенном расположении звезд/влажности/атмосферном далении/...
    - просто ему число не понравилось
    - ...
    Особенно прикольно бывает, когда данные в одном столбце импортируются то так то эдак, хотя выглядят абсолютно одинаково, но в итогах учитываются по-разному.
    Т.е. правильным было бы указывать при экспорте формат данных, но это не всегда возможно, или приводит к тормозам.
  • отредактировано 15:17
    Нашел способ как это "вылечить". Способ работает для версии FastReport3.19.1 .

    В модуле frxExportXLS в методе ExportPage_Fast

    1. добавить локальные переменные:
      CurValIsFloat: Boolean;
      conv : Extended;
    

    2. вместо текста
                if FAsText then
                  s := '''' + s;
                ArrData^[y + FMatrix.Height * (x - 1)] := s;
    

    внести
                if Obj.DisplayFormat.Kind=fkNumeric then
                begin
    {$IFDEF Delphi6}
                  CurValIsFloat := TryStrToFloat(s, conv);
                  if CurValIsFloat and (not FAsText) then
                    ArrData^[y + FMatrix.Height * (x - 1)] := conv
                  else
    {$ENDIF}
                    ArrData^[y + FMatrix.Height * (x - 1)] := s;
                end
                else
                begin
                  if FAsText then
                    s := '''' + s;
                    ArrData^[y + FMatrix.Height * (x - 1)] := s;
                end;
    

    Экспорт будет правильно экспортировать данные в числовом формате, но только с включенной галочкой Fast Export, потому как метод ExportPage_Fast создает массив с типом varVariant и подходит для корректной конвертации:
      ExlArray := VarArrayCreate([1, FMatrix.Height , 1, FMatrix.Width ], varVariant);
    

    Метод ExportPage создает массив уже в строковом типе и я даже не знаю можно этот тип менять или нет ;) :
      ExlArray := VarArrayCreate([0, FMatrix.Height - 1, 0, FMatrix.Width - 1], varOleStr);
    
  • visor123visor123 Днепропетровск
    отредактировано 15:17
    Stranger написал:
    Эту тему уже столько раз поднимали... Поиск для кого придуман?
    В двух словах - вы экспортируете результат, а результат это текст. И никакого признака формата данных там уже нет.
    Не согласен.
    Типы данных должны хранится в отчете, т.к. отчет фатически представлен XML-форматом, то задать тип в нем достаточно не сложно.
    При передаче в йксель в модулях я всегдя задаю формат колонок данных в соответствии с датасетом.

    Я глубоко сомневаюсь, что это невозможно, а для пользования это достаточно ощутимый + т.к. много пользователей экспорят в ёксель что-либо. В принципе это можно назвать более глубокой интеграцией с ёкселем.
  • visor123visor123 Днепропетровск
    отредактировано 15:17
    Не видел поста xstarter Дата Oct 25 2005, 12:11 PM
    Отлично ;)
    Если бы еще разработчики это написали, чтобы код при переходе версий не ровнять самому ;)
  • visor123visor123 Днепропетровск
    отредактировано 15:17
    UP
  • отредактировано 15:17
    xstarter написал:
    Поиск по ветке FastReport 3 не дает положительных результатов ни для "Excel", ни для "Экспорт".
    Неужели? А я чего-то вижу по экспорту 6 страниц топиков, а по екселю - 3 страницы. Может вы посмотрите в поиске параметры. Например срок давности ;)

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

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