Fastreport excel export
C# Разработка
Блог о создании приложений на платформе .NET Framework
29 октября 2018 г.
Решение нетипичных проблем с FastReport.
Статья будет состоять из способов решения проблем с FastReport ver. 2018.3.20. Проблемы изложенная тут может быть исправлена в последующих версиях FastReport либо отсутствовать в прошлых. Так же не исключаю, что я могу не знать что то, тогда если вам известно решение, то буду рад комментариям. Заранее Спасибо!
Темы описанные в статье:
- Автоматическая высота строки для текста не помещающегося в ячейку.
- Как обойти в коде все строки таблицы DataSource.
- Как использовать Linq или подключить сборки в отчёт FastReport.
- Объединение ячеек таблицы.
- Не работающий междустрочный интервал.
- Примеры использования условного оператора IIF(,,) в дизайнере отчёта.
- Сортировка и группировка данных в таблице отчёта.
- При экспорте в Excel или в Html большой таблицы, ячейки начинают биться либо появляется разделительная линия.
1. Автоматическая высота строки для текста не помещающегося в ячейку.
- CanGrow (Может расти) у DataBand таблицы:
Если ячейки сделаны через TextObject тогда следуем всем им проставить признак CanGrow (Может расти):
Если в качестве контейнера ячеек используете TableObject (что намного удобнее, нежели если использовать много TextObject), тогда следует выбрать AutoSize=True для вытягивания строк таблицы.
- Добавление новой строки в ячейке, где данные не умещаются
- В новой строке добавить «Невидимый символ», что бы не срабатывало автоматическое обрезание, которое по непонятным причинам происходит даже с выставленным Trimming=None свойством.
2. Как обойти в коде все строки таблицы DataSource.
3. Как использовать Linq или подключить сборки в отчёт FastReport.
4. Объединение ячеек таблицы.
В ситуации, когда планируется создать не просто сетку таблицы, а объединенные ячейки по какому то признаку, можно использовать свойство ячейки Duplicates со значение Merge. Что это означает? Каждый раз, когда в очередной строке значение ячейки совпадает со значений ячейки в предыдущей строке, FastReport, вместо печати дубля, объединяет ячейку в одну.
5. Не работающий междустрочный интервал.
Только лишь в этой комбинации эффект междустрочного интервала начал работать.
6. Примеры использования условного оператора IIF(,,) в дизайнере отчёта.
Приведу формат и парочку примеров, по которым сразу станет ясно использование оператора:
Формат:
[IIf(Condition, True, False)]
Пример 1. Если значение CompleteDate не равен null, тогда выводим текст год, иначе пусто:
[IIf([ActTechnicalEvent.CompleteDate] != null, «год»,null)]
Пример 2. Если первая буква имени А, тогда к имени добавляем префикс «*».
[IIf(Length([spt_values.name]) > 1 && UpperCase(Substring([spt_values.name], 0, 1)) == «A», «*» + [spt_values.name], [spt_values.name])]
Внимание! Если у вас ошибка «Error CS0103: The name ‘IIF’ does not exist in the current context» это из-за того, что название является регистрозависимым, и само имя написано неверно. Следует использовать IIf имя для условного оператора.
7. Сортировка и группировка данных в таблице отчёта.
Самая простая операция при формировании данных таблицы. Для обоих настроек существует 2 вкладки в настройках DataBand (Sort и Filter), отвечающие за эти действия. Для их настройки необходимо вызвать контекстное меню на DataBand (оранжевая область) и выбрать пункт меню Edit (Редактирование).
Внимание! Результат выражения во вкладке фильтрация должен быть Boolean, то есть в этом поле задаётся условие, как если бы было написано IF ( ВашеУсловиеВФильтре ) ВыводимСтроку ELSE Невыводим.
8. При экспорте в Excel или в Html большой таблицы, ячейки начинают биться либо появляется разделительная линия.
По началу данная природа поведения при экспорте мне была не понятна, с какой то фиксированной периодичностью ячейки бились невидимой линией. Но вскоре я понял, что данным разделителем является высота листа A4 при печати. А для того, что бы FastReport не добавлял разделительных линий необходимо поставить UnlimitedHeight в True для страницы отчёта:
Fastreport экспорт в excel
Как сделать в FastReport экспорт в Excel в т.ч. без показа диалогов и без разрывов страниц? Приведите пожалуйста полный пример.
1 ответ 1
Где frXLSExport1 — имя компонента для экспорта с закладки Fastreport Exports, который вы кинули на форму, FileName — имя файла, в который хотите сохранить.
Может отличаться для разных версий Дельфи и FastReport.
пытаюсь экспортировать отчет из FR3 в Excel
(отчет — матричный
у числовых полей выставлен DisplayFormat:
DecimalSeparator = ‘.’
FormatStr = %.2f
Kind = fkNumeric)
возникла проблема с сохранением числовых данных
некоторые числа в Excel автоформатируются в дату (например 5.50)
как это можно отключить
P.S.
в исходниках произходит формирование массива Variant и его передача в Excel, тоесть здесь явно формат не пропишешь 🙁
P.P.S.
если изменить DecimalSeparator на ‘,’ то все числовые значения преобразуются в текст
спасибо за ответы, вроде что то стало получаться
но в исходниках FR есть вот такая строка:
здесь стиль накладывается на всю страницу сразу
подскажите как наложить стиль на текущюю (оброабатываемую) ячейку?
спасибо
P.S.
в VBA не силен, а в их хелпе сколько не пытался найти необходимую информацию так и не смог 🙁
Цитата |
.Range. |
это не страница, а диапазон
знач зарпанее укажи диапазон
спасибо
ещё вопрос про эту же строку
где
Obj.StyleIndex = 1
FExcel.Range.Style становиться $001acddc
ктонибудь в курсе как распарсить этот стиль?
serjufa
1. Не могу понять, почему в frxReportTable.DesignReport просмотр нормальный
а в excel часть страницы переносится на 2-й лист вправо. Все — на одном и том же компе.
2. Почему строка 34 такая высокая? Почему место, отведенное ReportTitle на первом листе, занимается пустотой и на след. листах
Barmutik
Да проверьте сами что он там генерит .. у меян был прикол с экспортом в Эксель если не показывать окошко прогресса.. такую бороду экспортило что ужас .. помто поколупавшись по их коду поправил в 4 местах ошибки.
Так что может и у Вас чего похожее.
serjufa
Окно прогресса пришлось оставить по тем же причинам. но это меня мало волнует — юзер будет видеть, что комп не висит.