libxlsxwriter for Clarion

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

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

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

libxlsxwriter for Clarion

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

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

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,'Привет!')
Результат не соответствует ожиданиям :( Я что-то опять не то делаю ? Спасайте пожалуйста ... :)

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

libxlsxwriter for Clarion

Сообщение RaFaeL »

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

libxlsxwriter for Clarion

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

Спасибо. Это решает вопрос, хотя и не очень удобно ...

Сбивает с толку, то, что в примере описания worksheet_merge_range()
к диапазону ячеек применяется центровка, цвет фона и рамка.

У нас центровка и цвет фона отрабатывается для диапазона, а рамка - нет.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем. В рассматриваемой библиотеке как-то нестандартно построено.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1377
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 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)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.
Я конечно прошу пардона, но в XLSXWriter - именно так и сделано ... ;)
Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

RaFaeL писал(а): 28 Декабрь 2017, 10:16Поправил, будет как в примере - объединение ячеек применяет к ним ранее заданный формат.
Спасибо ! Таки теперь, тот же пример, работает совершенно кошерно ... ;)

2.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Декабрь 2017, 10:24
finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.
Я конечно прошу пардона, но в -скриптовый XLSXWriter - именно так и сделано ... ;)
Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
В сформированных xml файлах да. А в библиотеке нет. Например, запись строки может выглядеть так: xlsx.WriteString(row,col,string,style).
Я не хочу сказать, что это хуже или лучше. В доке написано, что библиотека является портом аналогичной библиотеки в питоне. Питон скриптовый язык, видимо, там делалось как удобнее писать код вручную. Отсюда и некий разворот. По моему опыту работы с прямым выводом в экселевский файл, вручную ничего не пишется. Или все берется из list контрола на экране, либо из шаблона в excel. То есть шрифты и стили определяются автоматически. В этом случае удобно вначале их все сформировать, а потом применять. А если, к примеру, посмотреть работу через ole, то там тоже ориентировано на ручное кодирование.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

То есть в классике выглядит так:
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
....
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1377
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

finsoftrz писал(а): 28 Декабрь 2017, 11:11 По моему опыту работы с прямым выводом в экселевский файл, вручную ничего не пишется. Или все берется из list контрола на экране, либо из шаблона в excel.
К примеру, в нашем проекте экспорт идет через печатную форму. Там куча вариантов, куда выгрузить, в т.ч. Excel. Соответственное, все шрифты и стиле задаются в редакторе, а там как раз все вместе хранится - контрол, а у него и свойства (шрифты, стили и т.п.) и содержимое, скажем так, в одной плоскости, поэтому никаких проблем с экспортом
То есть в классике выглядит так:
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
Так тоже можно, только очередь стилей нужно вести самому и менять руками свойство класса ActiveFormat. Т.е. делаешь SetFormat(), сохраняешь куда-то значение ActiveFormat, делаешь следующий стиль, затем когда надо меняешь переменную
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

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

libxlsxwriter for Clarion

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

RaFaeL писал(а): 28 Декабрь 2017, 11:23сохраняешь куда-то значение ActiveFormat, делаешь следующий стиль, затем когда надо меняешь переменную
Вот это - точно не для моего интеллекта. ;)
Это значит, где-то там, в прекрасном далёко, изменился формат стиля и поехало везде, где этот стиль используется ?
Спасибо - не надо. :)
У нас всё просто и понятно, как в армии: определил, вывел, забыл. Определил, вывел, забыл. и т.д. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1377
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Нет, ранее заданный формат как набор параметров изменить нельзя. Но можно сначала задать форматы, потом выводить данные. Что-то типа

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

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
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь, это стереотип в голове. Там, где используется понятие стиля, так и делается. Определяем стили для таблиц, форм ввода и т.п. Затем меняем параметры у стиля, меняется везде. В этом и смысл стилизации. Например, в том же вебе...
C6/C11, ШВС, tps/btrieve.
Ответить