"EhLib.Com" https://forum.ehlib.com/ru/ |
|
Lazarus: экспорт в xlsx: пустая таблица https://forum.ehlib.com/ru/viewtopic.php?f=4&t=2873 |
Страница 1 из 1 |
Автор: | edgen [ 31 окт 2019, 16:47 ] |
Заголовок сообщения: | Lazarus: экспорт в xlsx: пустая таблица |
Здравствуйте! Система: Код: Lazarus 2.1 (Win32) Ehlib 9.4.019 Windows 10 Не установлен MS Office LibreOffice, версия: 6.2.2.2 (x64) Есть несколько гридов, некоторые из них содержат DetailPanel, некоторые нет, во всех несколько колонок с фильтрами. Делаю для любого грида так: Код: procedure TfmMain.ExportGridToXLS(AMessage: string; AGrid: TDBGridEh); begin SaveDialog1.Title:=AMessage; if SaveDialog1.Execute then ExportDBGridEhToXlsx(AGrid, SaveDialog1.FileName, [xlsxColoredEh, xlsxDataAsDisplayText] , true) else exit; MessageDlg('Данные сохранены.', mtInformation, [mbYes], 0); end; На диске создаётся файл, указанный пользователем, он открывается без сообщений об ошибках как LibreOffice Calc, так и MS Office, но показывается пустая книга с одним листом. Если посмотреть, то внутри xlsx значения ячеек грида присутствуют. EhLib собран из исходников, только убрана кондиция {FPC_CROSSP}. Это только у меня так или всё же ошибка в библиотеке? С уважением Евгений. |
Автор: | edgen [ 31 окт 2019, 19:00 ] |
Заголовок сообщения: | Re: Lazarus: экспорт в xlsx: пустая таблица |
Пока отвечу сам себе и тем, у кого такая же ошибка. Дело в том, что в заголовке листа прописывается кодовая страница UFT8, а данные (мне непонятно, почему, вроде Lazarus юникодный везде) пишутся в 1251. У меня в гриде русские буквы. Соответственно, ошибка возникает в парсере офисов. Если прогнать получившийся xlsx через Open XML Productivity Tool, то будет сообщение об этой ошибке. На мой взгляд проблема где-то в районе строки 1327 файла XlsFileWritersEh.pas (для сборки 9.4.019) UPD: посмотрел на код повнимательнее, был не прав, перекодировать надо поток перед записью, строка ~956. |
Автор: | EhLibSupport [ 03 ноя 2019, 11:45 ] | |||
Заголовок сообщения: | Re: Lazarus: экспорт в xlsx: пустая таблица | |||
Добрый день. На тестовом проекте ошибка не воспроизводиться. Русский текст выгружается корректно. Можете изменить проект так, чтобы ошибка стала воспроизводится?
|
Автор: | edgen [ 05 ноя 2019, 13:54 ] |
Заголовок сообщения: | Re: Lazarus: экспорт в xlsx: пустая таблица |
Добрый день! Сразу не отображается третья колонка начиная со второй строки. Соответственно, чтобы показывался пустой файл, нужно присвоить DisplayLabel первой колонке грида значение с русскими буквами. Возможно то, что вся библиотека компилируется как {$mode delphi} имеет значение? С уважением Евгений. |
Автор: | edgen [ 05 ноя 2019, 15:26 ] | ||
Заголовок сообщения: | Re: Lazarus: экспорт в xlsx: пустая таблица | ||
Прикладываю, собственно, файл проекта и получившийся xlsx. Исходный на всякий случай переименовал в export1.xlsx.sample. Поскольку дело в настройках окружения, чуть подробнее про ОС и Lazarus: Windows 10 Pro (1903, сборка 18362.418) Региональные настройки: Регион: Россия Формат региона: Русский[Россия] Язык не-unicode программ: русский (Россия). Lazarus 2.1.0 (Rev 61603) fpc 3.3.1
|
Автор: | edgen [ 06 ноя 2019, 12:32 ] |
Заголовок сообщения: | Re: Lazarus: экспорт в xlsx: пустая таблица |
Проблема решена: поток для листа и поток для объединения листов нужно всё-таки создавать с явным указанием кодировки (TEncoding.UTF8). Убрал соответствующие условия компиляции в строках 4853 и 4854 файла DBGridEhImpExp.pas (для 9.4.019). Насколько получилось разобраться, дело в том, что при {$mode delphi} тип string является классической однобайтовой строкой. Поэтому кодировку надо задавать именно при создании потока, если перекодировать данные извлечённые из потока или при помещении их в поток мы либо получаем потерю данных (знаки вопроса на месте русских букв), либо мусор. |
Страница 1 из 1 | Часовой пояс: UTC |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |