libxlsxwriter for Clarion

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Да, спасибо. Так получается (я пробовал -1).
Получается, что если "установить" высоту строки в 15 (по умолчанию), то это просто игнорируется и не портит WrapText ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Проверил группировку строк на всех режимах - всё работает ! Спасибо ! :)
Возможности настройки очень впечатляют, но некоторые решения не очевидны.
Впрочем, подождём официального описания С версии библиотеки, возможно некоторые места прояснятся.
(Python не очень понятный язык, да и там своя специфика реализации LibXLSXWriter ...)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Для работы с группировкой строк / колонок просю добавить две встроенные константы библиотеки LibXLSXWriter:

Код: Выделить всё

XLSX:LXW_DEF_COL_WIDTH   EQUATE(8.43)
XLSX:LXW_DEF_ROW_HEIGHT  EQUATE(15.0)
Спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

В голове не запомнится чтоль? Ну добавлю. Может еще сделаю значение размера необязательным
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

RaFaeL писал(а): 07 Февраль 2018, 14:07В голове не запомнится чтоль?
Давно запомнилось уже ! ;)
Но раз эти размеры высоты / ширины в библиотеке вынесли на константы, значит они потом могут подстраиваться ...
Кто знает, что будет в том же Microsoft Office 2019 ? Никто не знает ... И ищи потом по всему коду эти "пятнашки" ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Сделал параметр размера необязательным, если не указан, то в библиотеку передается значение по умолчанию, которое затем игнорируется
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Тогда должно получиться очень хорошо ! :)

Я пока не могу понять, зачем автор LibXLSXWriter завязал группировку на методе установки параметров строки (колонок) ... :(
Это разные действия по сути. Там ещё 3-ий параметр (Hiden) работает по разному в зависимости от наличия 4 и 5 (Level / Collapse).
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Простой вариант добавления к XLSXWriter своих методов, данных и т.д. через наследование класса.
Показано в комментариях, что и где заменяется. На примере с группировкой строк. Проверено с Multi-DLL проектами.
За идею и помощь в отладке класса отдельное спасибо Деду Пахому. :)
Вложения
myxlsx.zip
(1.99 КБ) 85 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

С группировкой строк есть скользкое место ... :( Смотрите, что получается.
Добавляем строку в группу, а потом, в зависимости от условий просто меняем её высоту:

Код: Выделить всё

    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 не указан (не изменяется)" - это разное ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Да, перед приемом параметров настройки уровня очищаются
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

В принципе, если ведётся работа с группировкой строк, то любая строка должна находится на каком-то уровне .....
И тогда вполне логично, что этот уровень (в т.ч. и 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 ниже). :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Да там то пусто, то густо
Встраивал работу с погрешностями, на каждую галочку отдельная функция, хотя можно было сделать одну на все галочки
С другой сторону, для функции "проверка данных" наоборот - одна функция с ого-го какой структурой как параметр
Придется как-то с этим жить ) Хотя я уже научился читать и писать данные напрямую в память, если надо. Можно половину функций на свои заменить )
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

RaFaeL писал(а): 08 Февраль 2018, 11:30Хотя я уже научился читать и писать данные напрямую в память, если надо
Я уже как-то пытался идти по этому пути, когда хотел сделать быстрый контекстый поиск в строках.
Продолбился, но сделал. Получил выигрыш в скорости с Instring/Match на уровне погрешности (1-2%) .... :)
Хотя на форумах Delphi обещали "цигель, цигель ай-лю-лю". ;) В Clarion слишком хороший свой код для этого.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Я немного о другом. Можно вызывать функцию, которая установит свойство объекта в нужное значение, а можно это значение установить прямой записью в память по адресу. Полезно, если функции такой по каким-то причинам нет. Например, по АПИ нельзя получить указатель на ось https://github.com/jmcnamara/libxlsxwriter/issues/142 но я его получаю напрямую из памяти по смещению
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Доработал библиотеку, готово 98% функций, кроме

Код: Выделить всё

worksheet_data_validation_cell
worksheet_data_validation_range
worksheet_protect
format_set_unlocked
format_set_hidden
Эти пока не буду добавлять
Обновил шапку
Если то что было раньше можно считать бетой, это уже RC1. Релиз будет с обновлением родительской библиотеки до 0.7.6
Ответить