libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 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 КБ) 988 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Вот так всегда. На самом интересном месте ...
Спасибо, понял, ждём-с !
Спасибо, понял, ждём-с !

Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Что-то я опять запутался ... 
Хочу сделать незамысловатое действие: обвести несколько ячеек общей рамкой и вывести текст.
Пробуем на штатном примере:
Результат не соответствует ожиданиям
Я что-то опять не то делаю ? Спасайте пожалуйста ... 

Хочу сделать незамысловатое действие: обвести несколько ячеек общей рамкой и вывести текст.
Пробуем на штатном примере:
Код: Выделить всё
xlsx.ClearFormat()
err#=xlsx.WriteBoolean(5,1,1)
! 1 ВАРИАНТ - ПО ОПИСАНИЮ НА САЙТЕ XLSXWRITER
xlsx.Format.BorderStyle = XLSX:BorderLeft + XLSX:BorderTop + XLSX:BorderRight + XLSX:BorderBottom
xlsx.SetFormat()
err#=xlsx.Merge(3,3,5,5)
xlsx.SetSelection(3,3,3,3)
xlsx.Format.FontSize=18
xlsx.Format.FontColor=color:red
xlsx.Format.FontStyle=FONT:Bold
xlsx.Format.Align=XLSX:ALIGN_CENTER
xlsx.Format.AlignV=XLSX:ALIGN_VERTICAL_CENTER
! 2 ВАРИАНТ
!xlsx.Format.BorderStyle = XLSX:BorderLeft + XLSX:BorderTop + XLSX:BorderRight + XLSX:BorderBottom
xlsx.SetFormat()
err#=xlsx.WriteString(3,3,'Привет!')


Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Надо в цикле к каждой ячейке из диапазона формат применить через WriteBlank
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Спасибо. Это решает вопрос, хотя и не очень удобно ...
Сбивает с толку, то, что в примере описания worksheet_merge_range()
к диапазону ячеек применяется центровка, цвет фона и рамка.
У нас центровка и цвет фона отрабатывается для диапазона, а рамка - нет.
Сбивает с толку, то, что в примере описания worksheet_merge_range()
к диапазону ячеек применяется центровка, цвет фона и рамка.
У нас центровка и цвет фона отрабатывается для диапазона, а рамка - нет.
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем. В рассматриваемой библиотеке как-то нестандартно построено.
C6/C12, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Поправил, будет как в примере - объединение ячеек применяет к ним ранее заданный формат.Игорь Столяров писал(а): 28 Декабрь 2017, 10:03Сбивает с толку, то, что в примере описания worksheet_merge_range()
к диапазону ячеек применяется центровка, цвет фона и рамка.
Код: Выделить всё
xlsxwriter.Merge PROCEDURE(LONG first_row_,LONG first_col_,LONG last_row_,LONG last_col_)
CODE
return worksheet_merge_range(SELF.ActiveWorksheet,first_row_-1,first_col_-1,last_row_-1,last_col_-1,,SELF.ActiveFormat)
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Я конечно прошу пардона, но в XLSXWriter - именно так и сделано ...finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.

Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Спасибо ! Таки теперь, тот же пример, работает совершенно кошерно ...RaFaeL писал(а): 28 Декабрь 2017, 10:16Поправил, будет как в примере - объединение ячеек применяет к ним ранее заданный формат.

Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
В сформированных xml файлах да. А в библиотеке нет. Например, запись строки может выглядеть так: xlsx.WriteString(row,col,string,style).Игорь Столяров писал(а): 28 Декабрь 2017, 10:24Я конечно прошу пардона, но в -скриптовый XLSXWriter - именно так и сделано ...finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.
Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
Я не хочу сказать, что это хуже или лучше. В доке написано, что библиотека является портом аналогичной библиотеки в питоне. Питон скриптовый язык, видимо, там делалось как удобнее писать код вручную. Отсюда и некий разворот. По моему опыту работы с прямым выводом в экселевский файл, вручную ничего не пишется. Или все берется из list контрола на экране, либо из шаблона в excel. То есть шрифты и стили определяются автоматически. В этом случае удобно вначале их все сформировать, а потом применять. А если, к примеру, посмотреть работу через ole, то там тоже ориентировано на ручное кодирование.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
То есть в классике выглядит так:
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
....
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
....
C6/C12, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
К примеру, в нашем проекте экспорт идет через печатную форму. Там куча вариантов, куда выгрузить, в т.ч. Excel. Соответственное, все шрифты и стиле задаются в редакторе, а там как раз все вместе хранится - контрол, а у него и свойства (шрифты, стили и т.п.) и содержимое, скажем так, в одной плоскости, поэтому никаких проблем с экспортомfinsoftrz писал(а): 28 Декабрь 2017, 11:11 По моему опыту работы с прямым выводом в экселевский файл, вручную ничего не пишется. Или все берется из list контрола на экране, либо из шаблона в excel.
Так тоже можно, только очередь стилей нужно вести самому и менять руками свойство класса ActiveFormat. Т.е. делаешь SetFormat(), сохраняешь куда-то значение ActiveFormat, делаешь следующий стиль, затем когда надо меняешь переменнуюТо есть в классике выглядит так:
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
По такому принципу организуются данные в экселевских файлах. Возможно, это не очень удобно для ручного кодирования следовать такой же последовательности действий. Тут важно определить, что хотим. Если хотим полностью автоматизированного процесса, то удобнее следовать схеме, как в файлах, если хотим писать код вручную, то есть смысл отойти. Я предпочитаю первый вариант, хотя он требует большей подготовительной работы.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Вот это - точно не для моего интеллекта.RaFaeL писал(а): 28 Декабрь 2017, 11:23сохраняешь куда-то значение ActiveFormat, делаешь следующий стиль, затем когда надо меняешь переменную

Это значит, где-то там, в прекрасном далёко, изменился формат стиля и поехало везде, где этот стиль используется ?
Спасибо - не надо.

У нас всё просто и понятно, как в армии: определил, вывел, забыл. Определил, вывел, забыл. и т.д.

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Нет, ранее заданный формат как набор параметров изменить нельзя. Но можно сначала задать форматы, потом выводить данные. Что-то типа
Код: Выделить всё
LOC:Format LONG,DIM(100500)
xlsx.Format.BorderStyle=XLSX:BorderLeft+XLSX:BorderTop+XLSX:BorderRight+XLSX:BorderBottom
xlsx.SetFormat()
LOC:Format[1]=xlsx.ActiveFormat
xlsx.Format.FontSize=18
xlsx.Format.FontColor=color:red
xlsx.Format.FontStyle=FONT:Bold
xlsx.Format.Align=XLSX:ALIGN_CENTER
xlsx.Format.AlignV=XLSX:ALIGN_VERTICAL_CENTER
xlsx.SetFormat()
LOC:Format[2]=xlsx.ActiveFormat
xlsx.ActiveFormat=LOC:Format[1]
err#=xlsx.Merge(3,3,5,5)
xlsx.ActiveFormat=LOC:Format[2]
err#=xlsx.WriteString(3,3,'Привет!')
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
Игорь, это стереотип в голове. Там, где используется понятие стиля, так и делается. Определяем стили для таблиц, форм ввода и т.п. Затем меняем параметры у стиля, меняется везде. В этом и смысл стилизации. Например, в том же вебе...
C6/C12, ШВС, tps/btrieve.