Страница 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