libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
- Вложения
-
- libxlsxwriter.zip
- Версия 1.5 от 30.12.2021 на основе библиотеки 1.1.4
- (276.26 КБ) 1031 скачивание
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Да, спасибо. Так получается (я пробовал -1).
Получается, что если "установить" высоту строки в 15 (по умолчанию), то это просто игнорируется и не портит WrapText ...
Получается, что если "установить" высоту строки в 15 (по умолчанию), то это просто игнорируется и не портит WrapText ...
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Проверил группировку строк на всех режимах - всё работает ! Спасибо ! 
Возможности настройки очень впечатляют, но некоторые решения не очевидны.
Впрочем, подождём официального описания С версии библиотеки, возможно некоторые места прояснятся.
(Python не очень понятный язык, да и там своя специфика реализации LibXLSXWriter ...)

Возможности настройки очень впечатляют, но некоторые решения не очевидны.
Впрочем, подождём официального описания С версии библиотеки, возможно некоторые места прояснятся.
(Python не очень понятный язык, да и там своя специфика реализации LibXLSXWriter ...)
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Для работы с группировкой строк / колонок просю добавить две встроенные константы библиотеки LibXLSXWriter:
Спасибо ! 
Код: Выделить всё
XLSX:LXW_DEF_COL_WIDTH EQUATE(8.43)
XLSX:LXW_DEF_ROW_HEIGHT EQUATE(15.0)

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
В голове не запомнится чтоль? Ну добавлю. Может еще сделаю значение размера необязательным
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Давно запомнилось уже !

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

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Сделал параметр размера необязательным, если не указан, то в библиотеку передается значение по умолчанию, которое затем игнорируется
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Тогда должно получиться очень хорошо ! 
Я пока не могу понять, зачем автор LibXLSXWriter завязал группировку на методе установки параметров строки (колонок) ...
Это разные действия по сути. Там ещё 3-ий параметр (Hiden) работает по разному в зависимости от наличия 4 и 5 (Level / Collapse).

Я пока не могу понять, зачем автор LibXLSXWriter завязал группировку на методе установки параметров строки (колонок) ...

Это разные действия по сути. Там ещё 3-ий параметр (Hiden) работает по разному в зависимости от наличия 4 и 5 (Level / Collapse).
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Простой вариант добавления к XLSXWriter своих методов, данных и т.д. через наследование класса.
Показано в комментариях, что и где заменяется. На примере с группировкой строк. Проверено с Multi-DLL проектами.
За идею и помощь в отладке класса отдельное спасибо Деду Пахому.
Показано в комментариях, что и где заменяется. На примере с группировкой строк. Проверено с Multi-DLL проектами.
За идею и помощь в отладке класса отдельное спасибо Деду Пахому.

- Вложения
-
- myxlsx.zip
- (1.99 КБ) 106 скачиваний
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
С группировкой строк есть скользкое место ...
Смотрите, что получается.
Добавляем строку в группу, а потом, в зависимости от условий просто меняем её высоту:
Т.е. получается, что при работе с группировкой строк нужно использовать SetRow() всегда с полным набором необязательных параметров.
Может быть параметр "Level = 0" и "Level не указан (не изменяется)" - это разное ?

Добавляем строку в группу, а потом, в зависимости от условий просто меняем её высоту:
Код: Выделить всё
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
Может быть параметр "Level = 0" и "Level не указан (не изменяется)" - это разное ?
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
В принципе, если ведётся работа с группировкой строк, то любая строка должна находится на каком-то уровне .....
И тогда вполне логично, что этот уровень (в т.ч. и 0) надо всегда явно указывать при любом вызове SetRow() ...
Т.е. как таковой проблемы нет ни с логикой работы, ни с реализацией.
Есть путаница из двойного назначения SetRow(), просто особенность, котору нужно учитывать.
Я у себя сделал, что-то вроде:
но это уже на любителя (см. класс расширения XLSXWriter ниже). 
И тогда вполне логично, что этот уровень (в т.ч. и 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')
...

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Да там то пусто, то густо
Встраивал работу с погрешностями, на каждую галочку отдельная функция, хотя можно было сделать одну на все галочки
С другой сторону, для функции "проверка данных" наоборот - одна функция с ого-го какой структурой как параметр
Придется как-то с этим жить ) Хотя я уже научился читать и писать данные напрямую в память, если надо. Можно половину функций на свои заменить )
Встраивал работу с погрешностями, на каждую галочку отдельная функция, хотя можно было сделать одну на все галочки
С другой сторону, для функции "проверка данных" наоборот - одна функция с ого-го какой структурой как параметр
Придется как-то с этим жить ) Хотя я уже научился читать и писать данные напрямую в память, если надо. Можно половину функций на свои заменить )
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Я уже как-то пытался идти по этому пути, когда хотел сделать быстрый контекстый поиск в строках.RaFaeL писал(а): 08 Февраль 2018, 11:30Хотя я уже научился читать и писать данные напрямую в память, если надо
Продолбился, но сделал. Получил выигрыш в скорости с Instring/Match на уровне погрешности (1-2%) ....

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

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Я немного о другом. Можно вызывать функцию, которая установит свойство объекта в нужное значение, а можно это значение установить прямой записью в память по адресу. Полезно, если функции такой по каким-то причинам нет. Например, по АПИ нельзя получить указатель на ось https://github.com/jmcnamara/libxlsxwriter/issues/142 но я его получаю напрямую из памяти по смещению
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Доработал библиотеку, готово 98% функций, кроме
Эти пока не буду добавлять
Обновил шапку
Если то что было раньше можно считать бетой, это уже RC1. Релиз будет с обновлением родительской библиотеки до 0.7.6
Код: Выделить всё
worksheet_data_validation_cell
worksheet_data_validation_range
worksheet_protect
format_set_unlocked
format_set_hidden
Обновил шапку
Если то что было раньше можно считать бетой, это уже RC1. Релиз будет с обновлением родительской библиотеки до 0.7.6