Страница 6 из 62
libxlsxwriter for Clarion
Добавлено: 12 Февраль 2017, 14:06
RaFaeL
Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (
https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
libxlsxwriter for Clarion
Добавлено: 27 Декабрь 2017, 10:19
Игорь Столяров
Вот так всегда. На самом интересном месте ...
Спасибо, понял, ждём-с !

libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 9:27
Игорь Столяров
Что-то я опять запутался ...

Хочу сделать незамысловатое действие: обвести несколько ячеек общей рамкой и вывести текст.
Пробуем на штатном примере:
Код: Выделить всё
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,'Привет!')
Результат не соответствует ожиданиям

Я что-то опять не то делаю ? Спасайте пожалуйста ...
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 9:53
RaFaeL
Надо в цикле к каждой ячейке из диапазона формат применить через WriteBlank
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 10:03
Игорь Столяров
Спасибо. Это решает вопрос, хотя и не очень удобно ...
Сбивает с толку, то, что в примере описания worksheet_merge_range()
к диапазону ячеек применяется центровка, цвет фона и рамка.
У нас центровка и цвет фона отрабатывается для диапазона, а рамка - нет.
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 10:14
finsoftrz
В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем. В рассматриваемой библиотеке как-то нестандартно построено.
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 10:16
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)
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 10:24
Игорь Столяров
finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.
Я конечно прошу пардона, но в XLSXWriter - именно так и сделано ...

Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 10:33
Игорь Столяров
RaFaeL писал(а): 28 Декабрь 2017, 10:16Поправил, будет как в примере - объединение ячеек применяет к ним ранее заданный формат.
Спасибо ! Таки теперь, тот же пример, работает совершенно кошерно ...
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:11
finsoftrz
Игорь Столяров писал(а): 28 Декабрь 2017, 10:24finsoftrz писал(а): 28 Декабрь 2017, 10:14В классике жанра создаются шрифты, затем стили. Потом уже выводятся значения в ячейки с заданным стилем.
Я конечно прошу пардона, но в -скриптовый XLSXWriter - именно так и сделано ...

Задаётся шрифт, стиль, он применяется и далее идёт вывод заданными настройками ...
В сформированных xml файлах да. А в библиотеке нет. Например, запись строки может выглядеть так: xlsx.WriteString(row,col,string,style).
Я не хочу сказать, что это хуже или лучше. В доке написано, что библиотека является портом аналогичной библиотеки в питоне. Питон скриптовый язык, видимо, там делалось как удобнее писать код вручную. Отсюда и некий разворот. По моему опыту работы с прямым выводом в экселевский файл, вручную ничего не пишется. Или все берется из list контрола на экране, либо из шаблона в excel. То есть шрифты и стили определяются автоматически. В этом случае удобно вначале их все сформировать, а потом применять. А если, к примеру, посмотреть работу через ole, то там тоже ориентировано на ручное кодирование.
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:20
finsoftrz
То есть в классике выглядит так:
xlsx.addFont(font1, параметры)
xlsx.addFont(font2, параметры)
xlsx.addStyle(style1, font1, параметры)
...
xlsx.WriteString(row,col,string1,style1)
xlsx.WriteNumeric(row,col,num1,style2)
....
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:23
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, делаешь следующий стиль, затем когда надо меняешь переменную
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:25
finsoftrz
По такому принципу организуются данные в экселевских файлах. Возможно, это не очень удобно для ручного кодирования следовать такой же последовательности действий. Тут важно определить, что хотим. Если хотим полностью автоматизированного процесса, то удобнее следовать схеме, как в файлах, если хотим писать код вручную, то есть смысл отойти. Я предпочитаю первый вариант, хотя он требует большей подготовительной работы.
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:36
Игорь Столяров
RaFaeL писал(а): 28 Декабрь 2017, 11:23сохраняешь куда-то значение ActiveFormat, делаешь следующий стиль, затем когда надо меняешь переменную
Вот это - точно не для моего интеллекта.

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

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

libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:49
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,'Привет!')
libxlsxwriter for Clarion
Добавлено: 28 Декабрь 2017, 11:49
finsoftrz
Игорь, это стереотип в голове. Там, где используется понятие стиля, так и делается. Определяем стили для таблиц, форм ввода и т.п. Затем меняем параметры у стиля, меняется везде. В этом и смысл стилизации. Например, в том же вебе...