Как создать файл в CSV из Delphi / C++Builder / Lazarus?

29.05.2020

CSV-файлы (файлы данных с разделителями-запятыми) — это файлы особого типа, которые можно создавать, читать и редактировать в Excel. Считается этот формат текстовым и предназначен предоставлять табличные данные. В CSV данные хранятся не в столбцах, а разделенные запятыми - в англоязычных версиях или точкой с запятой – в русскоязычных версиях программы. Текст и числа, сохраненные в этом формате, можно легко переносить из одной программы в другую.

CSV файл может прочесть текстовый редактор, причем в список редакторов, входит большинство программ, применяемых для работы с текстом и таблицами. Таким образом, открыть файл со значением формата .csv, могут такие программы, как Microsoft Excel или Corel WordPerfect Office, также этот формат файла открывается утилитами LibreOffice, Apache OpenOffice.

Во время открытия документа в Excel основная задача (проблема) заключается в выборе способа кодировки, примененного при сохранении файла. Если будет выбрана не та кодировка, скорее всего, пользователь увидит множество нечитаемых символов. Помимо этого, ключевое значение имеет используемый разделитель. Например, если документ был сохранен в англоязычной версии, а затем его пытаются открыть в русскоязычной, то качество отображаемой информации пострадает. Причина всё в тех же разделителях.

Самый простой и очевидный способ записать CSV из Delphi - просто тупо перебирать ячейки в StringGrid, записывать в файл их содержимое не забывая проставлять разделительный символ. И не забывая про кодировку.

Так вот - FastReport традиционно может делать и CSV из Lazarus и Delphi - лучше и удобнее. И далеко не только из StringGrid.

Как сделать отчёт, который будет хорошо выглядеть в результирующем табличном формате?

Есть несколько приёмов:

1. Никаких пересечений или наслоений ячеек! Да, дизайнер FastReport позволяет накидать объекты друг на друга с частичным перекрытием, но средства табличного экспорта учитывают эти требования при переносе объектов из отчета FastReport в результирующий табличный файл специальными алгоритмами учета пересечений объектов и оптимального их расположения. В местах пересечений объектов возникают новые столбцы и строки в результирующей таблице. Это необходимо для сохранения точного позиционирования переносимых объектов FastReport.

2. Избежать перекрытия ячеек помогут инструменты выравнивания текстовых объектов по сетке и направляющим. Проследите за тем, чтобы было включено выравнивание по сетке. Для упрощения выравнивания можно увеличить шаг сетки.

3. При создании таблиц в отчетах проследите чтобы границы соседних ячеек соприкасались друг с другом. Важно, чтобы ячейки не пересекались. Алгоритм фильтра экспорта сделает отсечение ячеек, но результат экспорта может быть далек от желаемого (вы увидите не совсем то, что хотели).

4. Располагайте объекты так, чтобы они находились на одной линии, как по вертикали, так и по горизонтали.
До сохранения в .csv у вас уже должен быть собран проект с внедрённым FastReport c компонентом “экспорт в CSV file” и реализован отчёт (по созданию отчётов есть отдельная статья). Ещё раз уточню - да, вы можете в качестве источника данных для отчёта (а значит и для CSV) использовать внутренние источники приложения и базы данных. Любые. Запустили и в предпросмотре обязательно сохранили, всё как по учебнику. Теперь вызываем экспорт из предпросмотра (в конце статьи есть способ реализации через код), должно появиться такое окошко настроек.

CSV настройки

Средства FastReport помогают выбрать, какие страницы нашего документа отправить в Excel, диапазон или только определённые страницы.

Свойства экспортирования – использование OEM кодировки (по умолчанию используется Windows кодировка) и выбор разделителя (по умолчанию стоит «;»), в зависимости от того, что Вам нужно.

Как и всегда можно указать, куда отправить CSV-файл (локально в файл, на электронную почту, FTP или поместить в облако).

Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта.

Сохранение в .csv с помощью кода

Сохранение в CSV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Button8Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы
  сформированного отчёта}
 frxCSVExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать текст в OEM кодировке или в кодировке Windows}
 frxCSVExport1.OEMCodepage := False;
 {Устанавливаем разделитель полей}
 frxCSVExport1.Separator := ';';
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxCSVExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта
  (показывать, какая страница в данный момент экспортируется)}
 frxCSVExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxCSVExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла. Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта, то всё равно будет отображён диалог выбора имени файла}
 frxCSVExport1.FileName := 'C:\Output\test.csv';
 {Экспортируем отчёт}
 frxReport1.Export(frxCSVExport1);
end;

 Как видим, даже проще, чем просто из кода отправлять в CSV из грида! Используйте!

2 сентября 2024

Обзор облачного решения для создания и управления отчетами

МоиОтчеты Облако — это мощное облачное решение для создания и управления отчетами, обеспечивающее широкий спектр возможностей, от создания документов в различных форматах до интеграции с корпоративными системами.
12 августа 2024

Как собрать и установить плагин Postgres в FastReport .NET

В этой статье описывается подключение к базе посредством плагина FastReport .NET для дизайнера отчетов из Visual Studio через NuGet-сервер.
8 августа 2024

Как установить FastReport .NET и его компоненты в Windows

Пошаговая инструкция по онлайн и ручной установке через регистрационный код FastReport .NET и его компонентов в Windows.