Страница 30 из 62
libxlsxwriter for Clarion
Добавлено: 12 Февраль 2017, 14:06
RaFaeL
Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (
https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 11:09
Игорь Столяров
Да, спасибо. Так получается (я пробовал -1).
Получается, что если "установить" высоту строки в 15 (по умолчанию), то это просто игнорируется и не портит WrapText ...
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 11:55
Игорь Столяров
Проверил группировку строк на всех режимах - всё работает ! Спасибо !

Возможности настройки очень впечатляют, но некоторые решения не очевидны.
Впрочем, подождём официального описания С версии библиотеки, возможно некоторые места прояснятся.
(Python не очень понятный язык, да и там своя специфика реализации LibXLSXWriter ...)
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 13:38
Игорь Столяров
Для работы с группировкой строк / колонок просю добавить две встроенные константы библиотеки LibXLSXWriter:
Код: Выделить всё
XLSX:LXW_DEF_COL_WIDTH EQUATE(8.43)
XLSX:LXW_DEF_ROW_HEIGHT EQUATE(15.0)
Спасибо !

libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 14:07
RaFaeL
В голове не запомнится чтоль? Ну добавлю. Может еще сделаю значение размера необязательным
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 14:15
Игорь Столяров
RaFaeL писал(а): 07 Февраль 2018, 14:07В голове не запомнится чтоль?
Давно запомнилось уже !

Но раз эти размеры высоты / ширины в библиотеке вынесли на константы, значит они потом могут подстраиваться ...
Кто знает, что будет в том же Microsoft Office 2019 ? Никто не знает ... И ищи потом по всему коду эти "пятнашки" ...

libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 17:44
RaFaeL
Сделал параметр размера необязательным, если не указан, то в библиотеку передается значение по умолчанию, которое затем игнорируется
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 18:31
Игорь Столяров
Тогда должно получиться очень хорошо !
Я пока не могу понять, зачем автор LibXLSXWriter завязал группировку на методе установки параметров строки (колонок) ...

Это разные действия по сути. Там ещё 3-ий параметр (Hiden) работает по разному в зависимости от наличия 4 и 5 (Level / Collapse).
libxlsxwriter for Clarion
Добавлено: 07 Февраль 2018, 22:01
Игорь Столяров
Простой вариант добавления к XLSXWriter своих методов, данных и т.д. через наследование класса.
Показано в комментариях, что и где заменяется. На примере с группировкой строк. Проверено с Multi-DLL проектами.
За идею и помощь в отладке класса отдельное спасибо Деду Пахому.

libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 9:21
Игорь Столяров
С группировкой строк есть скользкое место ...

Смотрите, что получается.
Добавляем строку в группу, а потом, в зависимости от условий просто меняем её высоту:
Код: Выделить всё
Loc:Row = 3
XLSX.ClearFormat()
i# = XLSX.SetRow(Loc:Row, XLSX:LXW_DEF_ROW_HEIGHT, False, 1, False) ! Строка в группе (Level = 1)
....
If (например есть картинка)
i# = XLSX.SetRow(Loc:Row,100) ! Строка вылетает из группы, хотя параметров управления группировкой нет :(
end
Т.е. получается, что при работе с группировкой строк нужно использовать SetRow() всегда с полным набором необязательных параметров.
Может быть параметр "Level = 0" и "Level не указан (не изменяется)" - это разное ?
libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 10:41
RaFaeL
Да, перед приемом параметров настройки уровня очищаются
libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 11:20
Игорь Столяров
В принципе, если ведётся работа с группировкой строк, то любая строка должна находится на каком-то уровне .....
И тогда вполне логично, что этот уровень (в т.ч. и 0) надо всегда явно указывать при любом вызове SetRow() ...
Т.е. как таковой проблемы нет ни с логикой работы, ни с реализацией.
Есть путаница из двойного назначения SetRow(), просто особенность, котору нужно учитывать.

Я у себя сделал, что-то вроде:
Код: Выделить всё
XLSX.SetRowLevel(0)
XLSX.WriteMyString(Loc:Row,Loc:Col, 'ГРУППА')
XLSX.SetRowLevel(1)
XLSX.WriteMyString(Loc:Row,Loc:Col, 'Строка 1')
XLSX.WriteMyString(Loc:Row,Loc:Col, 'Строка 2')
...
но это уже на любителя (см. класс расширения XLSXWriter ниже).

libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 11:30
RaFaeL
Да там то пусто, то густо
Встраивал работу с погрешностями, на каждую галочку отдельная функция, хотя можно было сделать одну на все галочки
С другой сторону, для функции "проверка данных" наоборот - одна функция с ого-го какой структурой как параметр
Придется как-то с этим жить ) Хотя я уже научился читать и писать данные напрямую в память, если надо. Можно половину функций на свои заменить )
libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 11:38
Игорь Столяров
RaFaeL писал(а): 08 Февраль 2018, 11:30Хотя я уже научился читать и писать данные напрямую в память, если надо
Я уже как-то пытался идти по этому пути, когда хотел сделать быстрый контекстый поиск в строках.
Продолбился, но сделал. Получил выигрыш в скорости с Instring/Match на уровне погрешности (1-2%) ....

Хотя на форумах Delphi обещали "цигель, цигель ай-лю-лю".

В Clarion слишком хороший свой код для этого.
libxlsxwriter for Clarion
Добавлено: 08 Февраль 2018, 13:35
RaFaeL
Я немного о другом. Можно вызывать функцию, которая установит свойство объекта в нужное значение, а можно это значение установить прямой записью в память по адресу. Полезно, если функции такой по каким-то причинам нет. Например, по АПИ нельзя получить указатель на ось
https://github.com/jmcnamara/libxlsxwriter/issues/142 но я его получаю напрямую из памяти по смещению
libxlsxwriter for Clarion
Добавлено: 10 Февраль 2018, 9:53
RaFaeL
Доработал библиотеку, готово 98% функций, кроме
Код: Выделить всё
worksheet_data_validation_cell
worksheet_data_validation_range
worksheet_protect
format_set_unlocked
format_set_hidden
Эти пока не буду добавлять
Обновил шапку
Если то что было раньше можно считать бетой, это уже RC1. Релиз будет с обновлением родительской библиотеки до 0.7.6