Тип данных при экспорте в Excel

отредактировано 14:48 Раздел: FastReport 3.0
После экспорта отчета в Excel, с числами нельзя проводить различные операции (SUM, AVG,формулы), т.е. Excel не воспринимает их как числа. Как Репорту сказать нужный формат поля, чтоб при экспорте он сохранился ? FR 3.09

Комментарии

  • отредактировано 14:48
    Форматируй не перед экспортом, а изначально правильно.
  • отредактировано 14:48
    Как ? Желательно примерчик.
  • отредактировано 14:48
    FR3.11 имеет флажок As text в экспорте в ole/excel. Если флажок не установлен, в эксел пойдут числа, а не строки.
  • отредактировано 14:48
    А в версии 3.09 числа по умолчанию не идут, сразу строки ?
  • отредактировано 14:48
    Вопрос так и не решен, подскажите что я делаю не так:
    InterBase 5.6
    Delphi 7.0
    FR 3.09
    Отчет формируется хранимой процедурой
    тип поля PRICE:DOUBLE PRECISION
    MasterData.DataSet=frxDBDataset1
    На нем лежит Memo1, в теле мемо прописано [frxDBDataset1."PRICE"],
    Memo1.DisplayFormat=%2.2n
    больше в мемо ничего не менялось. При экспорте в Excel с полем PRICE работать как с числами нельзя, показывает Format Cells - General и конвертить в Number не хочет.
    Ткните носом пожалуста ;)
  • отредактировано 14:48
    Ясно же написанно:
    AlexTZ написал:
    FR3.11 имеет флажок As text в экспорте в ole/excel. Если флажок не установлен, в эксел пойдут числа, а не строки.
  • DirexDirex Москва
    отредактировано 14:48
    Не поймёт Excel число с разделителями. Чтобы после экспорта строки общего формата воспринимались Excel-ем как числа, пробелов между цифрами быть не должно. Используйте форматирование %2.2f.

    ЗЫ Очень неудобно смотреть даже на шести-семи-значные числа без разделителей. А с разделителями нельзя использовать экспорт... вернее, кому он нужен без возможности операций над результатми отчёта.
  • отредактировано 14:48
    А нельзя как-нибудь при экспорте в Эксель обрабатывать значения уберая пробелы автоматом ?
  • отредактировано 14:48
    Неужели это проблема раньше не поднималась ?
  • DirexDirex Москва
    отредактировано 14:48
    Кстати, в IBExpert эта проблема решена очень красиво. Всё великолепно форматируется и везде работают агрегатные ф-ции. Если я не ошибаюсь, там строка форматирования добавляется в список форматов [все форматы]
  • отредактировано 14:48
    Где искать [Все форматы] ?
  • DirexDirex Москва
    отредактировано 14:48
    В Excel. Последняя группа форматов.
  • отредактировано 14:48
    Ну всё, вопрос решен. Memo1.DisplayFormat:='#,###,##0.00'
    При экспорте в Эксель всё считает. Всем спасибо.
  • отредактировано 14:48
    Наврал, не работает. ;) Вопрос открыт.
  • отредактировано 14:48
    IBExpert похоже экспортирует не с помощью FR, а на прямую из грида с помощью какого-нибудь стандартного экспорта типа как у EhLib. Рэбята неужели нет способов нормально эспортнуть ?
  • отредактировано 14:48
    Скажите в FR 3.15 то, что я хочу реализовано ?
  • отредактировано 14:48
    Нет, и не будет. Форматирует данные в 90% случаев не FR, а поле БД уже возвращает отформатированную строку через TField.DisplayText. Там и пробелы, и разделители, и символ валюты. При всем этом в FR стоит формат значения - текст, т.е. без форматирования. Как при этом сказать экселу, что перед ним число, а не строка?
  • DirexDirex Москва
    отредактировано 14:48
    Я уже ранее поднимал эту тему...

    Если экспортировать в Excel строку, форматированную как "строка" и состоящую из цифр , то "общий формат" затирает нули в начале (считая строку числом). В артикулах это встречается сплошь и рядом. А артикул без нулей в начале - это уже другой артикул.

    Апостроф в начале, уважаемые разработчики, это криво. Некотрые надстройки Excel его воспринимают именно как апостроф и отказываются считать эквивалентными значения с апострофом и без него.
  • DirexDirex Москва
    отредактировано 14:48
    А что мешает сделать так же, как в IBExpert'е ? Или хотя бы текстовый формат сделать именно форматом, а не коверкать передаваемые данные? Это не такая уж мелочь. Большинство нормальных пользователей юзают электронные таблицы и от этого никуда не деться...
  • отредактировано 14:48
    А такой вариант возможен:
    Memo.DisplayFormat.kind=fkNumeric
    когда Memo.DisplayFormat.FormatStr<>'' тогда убераем все пробелы в строке, передаем строку в эксель и делаем формат строки в экселе равный Memo.DisplayFormat.FormatStr.
  • SlasherXSlasherX Россия, Магнитогорск
    отредактировано 14:48
    AlexTZ написал:
    Нет, и не будет. Форматирует данные в 90% случаев не FR, а поле БД уже возвращает отформатированную строку через TField.DisplayText. Там и пробелы, и разделители, и символ валюты. При всем этом в FR стоит формат значения - текст, т.е. без форматирования. Как при этом сказать экселу, что перед ним число, а не строка?
    А для чего тогда нужен экспорт в Excel... ВСЕ ПОЛЬЗОВАТЕЛИ вопят, что невозможно работать с числами в Excel.... Ведь им же нужно как раз таки посмотреть суммы разных ячеек...

    Как-нибудь возможно решить эту проблему?

    Если есть тысячные разделители (формат указан в самом FR), то кидается как текст... филды создаются динамически. То есть статически они не добавлены ни в TADOQuery, ни в TADOStoredProc...

    Вопрос очень наболевший, и очень бы хотелось получить его решение.

    FR 3.15 + D6 upd2

    P.S. Написал несколько сумбурно... но думаю суть проблемы понятна...
  • отредактировано 14:48
    AlexTZ написал:
    Нет, и не будет. Форматирует данные в 90% случаев не FR, а поле БД уже возвращает отформатированную строку через TField.DisplayText. Там и пробелы, и разделители, и символ валюты. При всем этом в FR стоит формат значения - текст, т.е. без форматирования. Как при этом сказать экселу, что перед ним число, а не строка?
    Глянуть глубже. Например, если датасет - часть отчета, что мешает проверить тип поля? И уж если нет возможности, тогда экспортировать в виде текста.
  • DirexDirex Москва
    отредактировано 14:48
    Полностью присоединяюсь ко всему сказанному. Есть ведь возможность посмотреть ТИП поля? Есть, какое бы ни было у него форматирование. А дальше уже хрен с ним, передать в том же виде, как есть, но выставить у ячейки Excel этот тип, чтобы он не интерпретировал данные на своё усмотрение, которое оставляет желать лучшего (
  • SAASAA
    отредактировано 14:48
    Я сделал для решения этой проблемы следующее:

    в TfrView добавил два свойства
    NativeDataType:word (vartype от типа variant)
    NativeDigit:string - число ДО форматирования (строка - чтобы не заморачиваться с сохранением в поток разных типов Currency и т.п.)

    Меняется формат frp (frf не затрагивается)

    В InternalOnGetValue сохраняется тип и число (если число)
    В ExpandVariables всякие проверки, что в мемо _только_ одно число, а не, например, два числа двумя строками.

    В экспорте в excel остается только правильно записать формат и если тип число - то NativeDigit, а не отформатированный текст.

    Правда делал я все это на fr2.45

    "Поверхносные" решения приводили к тому, что excel начинал всякие номера типа номер документа '00001' преобразовывать к цифрам, получалось 1.
    А длинные номера, например, номер банковского счета - вообще к форматам типа '4E19' ;)
  • DirexDirex Москва
    отредактировано 14:48
    Афигенно
    Господа разработчики, отрегагируйте что ли... Вам не кажется, что эту проблему надо решать как то? Или вам надо выложить код?
  • SamuraySamuray Administrator
    отредактировано 14:48
    Форматирование будет в версии 3.16
  • DirexDirex Москва
    отредактировано July 2005
    Спасибо.
    В пакете отчётов к софту просто невозможно предусмотреть все моменты, а без нормального форматирования обрабатывать данные отчёта внешними приложениями не всегда удобно...

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

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