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 КБ) 983 скачивания
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
Огромное спасибо ! Вы не мешаете, просто в магазине - продуктовое, в аптеке - лекарства и т.д.
А у нас сельпо какое-то получается. Тем более, что Вы отвечаете на мой вопрос по libxlsxwriter со
ссылкой на свою библиотеку, которую никто кроме Вас не видел. Какая польза от этого ?
Заведите тему, выложите библиотеку, её можно будет поюзать, обсудить и понять описываемые Вами структуры.
Если Вы конечно сами этого хотите. Это - нормально ...
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5226
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
libxlsxwriter for Clarion
Вы не так поняли. Эта структура соответствует представлению в xlsx формате. Я просто скопировал ее из своего класса, чтобы было понятнее. В libxlsxWriter некоторые вещи трактуются достаточно своеобразно. Ладно, все, перехожу в readonly... 

C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
И напрасно ! Ваши замечания и рекомендации (когда они в тему обсуждаемого вопроса) - очень полезны.

Make Clarion Great Again ! 
libxlsxwriter for Clarion
Попробовал библиотечку.
В целом довольно неплохо, но есть два момента. Во-первых: если я правильно понял, текст из примера
xlsx.Format.Picture='@n-14.0'
xlsx.SetFormat()
err#=xlsx.WriteNumber(2,3,123.0)
должен был отформатировать ячейку, как числовую - у меня не форматирует, формат ячейки "Общий"
В принципе, нужен вывод числа с двумя знаками после запятой.
Во-вторых, хотел линиями обрамить сразу всю выводимую табличку (да и числовой формат некоторым столбцам установить), но setselection не помог (а вот setcolumn отрешетил столбцы). Пришлось в цикле форматировать при выводе очереди.
Да, и без Autofit'а, конечно печалька.
В целом довольно неплохо, но есть два момента. Во-первых: если я правильно понял, текст из примера
xlsx.Format.Picture='@n-14.0'
xlsx.SetFormat()
err#=xlsx.WriteNumber(2,3,123.0)
должен был отформатировать ячейку, как числовую - у меня не форматирует, формат ячейки "Общий"

Во-вторых, хотел линиями обрамить сразу всю выводимую табличку (да и числовой формат некоторым столбцам установить), но setselection не помог (а вот setcolumn отрешетил столбцы). Пришлось в цикле форматировать при выводе очереди.
Да, и без Autofit'а, конечно печалька.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Установка форматов работает, если установлен шаблон Taboga Native Excel, используется TPictureClass оттуда, который конвертирует кларионовский шаблон в экселевский. Поскольку эта штука номинально платная и на нее у кого-то есть авторские права, в комплекте с оберткой для libxlsxwriter не поставляется
libxlsxwriter for Clarion
Судя по тексту при отсутствии Taboga Native Excel, если я укажу в xlsx.Format.Picture='@n-14.0' прямо эксельный формат, то должно сработать. Никто не подскажет, чего туда засунуть для отображения знака числа и двух цифирек после запятой? 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
Можно ли предложить для рассмотрения простой вариант решения вопроса с прорисовкой линий сетки ?
Работы на 2 минуты, полная совместимость с предыдущим кодом. Теперь:
рисует комбинированную рамку на любой вкус:
Заранее спасибо за рассмотрение !
Код: Выделить всё
! --- XLSXWriter.inc (добавляем)
FormatType GROUP,TYPE
....
BorderLeftFormat BYTE(255) ! + добавить инициализацию в ClearFormat()
BorderRightFormat BYTE(255)
BorderTopFormat BYTE(255)
BorderBottomFormat BYTE(255)
...
! --- XLSXWriter.clw (заменяем)
xlsxwriter.SetFormat PROCEDURE
CODE
....
if SELF.Format.BorderStyle=15 and |
SELF.Format.BorderLeftFormat = 255 and |
SELF.Format.BorderRightFormat = 255 and |
SELF.Format.BorderTopFormat = 255 and |
SELF.Format.BorderBottomFormat = 255
format_set_border(SELF.FormatQ.Ref,SELF.Format.BorderFormat)
elsif SELF.Format.BorderStyle
if BAND(SELF.Format.BorderStyle,XLSX:BorderLeft)>0
format_set_left(SELF.FormatQ.Ref,Choose(SELF.Format.BorderLeftFormat = 255,Self.Format.BorderFormat,SELF.Format.BorderLeftFormat))
end
if BAND(SELF.Format.BorderStyle,XLSX:BorderRight)>0
format_set_right(SELF.FormatQ.Ref,Choose(SELF.Format.BorderRightFormat = 255,Self.Format.BorderFormat,SELF.Format.BorderRightFormat))
end
if BAND(SELF.Format.BorderStyle,XLSX:BorderTop)>0
format_set_top(SELF.FormatQ.Ref,Choose(SELF.Format.BorderTopFormat = 255,Self.Format.BorderFormat,SELF.Format.BorderTopFormat))
end
if BAND(SELF.Format.BorderStyle,XLSX:BorderBottom)>0
format_set_bottom(SELF.FormatQ.Ref,Choose(SELF.Format.BorderBottomFormat = 255,Self.Format.BorderFormat,SELF.Format.BorderBottomFormat))
end
end
...
Код: Выделить всё
xlsx.ClearFormat()
xlsx.Format.BorderLeftFormat = XLSX:BORDER_NONE
xlsx.Format.BorderRightFormat = XLSX:BORDER_DOTTED
xlsx.Format.BorderTopFormat = XLSX:BORDER_THICK
xlsx.Format.BorderBottomFormat = XLSX:BORDER_DOUBLE
xlsx.Format.BorderStyle=XLSX:BorderLeft+XLSX:BorderTop+XLSX:BorderRight+XLSX:BorderBottom
xlsx.SetFormat()
err#=xlsx.WriteBlank(10,10)
рисует комбинированную рамку на любой вкус:
Заранее спасибо за рассмотрение !

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Сейчас не сработает, но я уже немного переделал этот кусок, можно будет напрямую указывать экселевский форматzmi писал(а): 10 Январь 2018, 9:39Судя по тексту при отсутствии Taboga Native Excel, если я укажу в xlsx.Format.Picture='@n-14.0' прямо эксельный формат, то должно сработать. Никто не подскажет, чего туда засунуть для отображения знака числа и двух цифирек после запятой?
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Понял что нужно, пока не определился, как лучше сделать. Там еще и с цветами линий то же самоеИгорь Столяров писал(а): 10 Январь 2018, 10:13Можно ли предложить для рассмотрения простой вариант решения вопроса с прорисовкой линий сетки ?
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
Ну да. Я просто как чукча: что вижу - то и пою.

Пробую рисовать обычные обычные отчёты - а они печатаются на чёрно-белом принтере, поэтому раскраску не использую.
А вот выделение видом сетки - полезная опция (на мой субъективный взгляд). Спасибо !
Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
ОК, для полной функциональности библиотеки придется отказаться от стилей, будут просто значения, что заполните, то и применится. Сначала применяются общие параметры ячейки, можно отдельные переопределить
Последний раз редактировалось RaFaeL 13 Январь 2018, 14:45, всего редактировалось 1 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
Спасибо ! Рисование рамок теперь получилось намного понятней, но если позволите небольшую критику, тоRaFaeL писал(а): 10 Январь 2018, 18:26Сначала применяются общие параметры ячейки, можно отдельные переопределить
хотел заметить, что всё-таки хорошо бы разделить понятия "без рамки" и "не рисовать рамку". Поясню на примере.
Хочу нарисовать толстую рамку и низ отделить двойной линией. Без проблем !
Код: Выделить всё
xlsx.ClearFormat()
xlsx.Format.Border.Format=XLSX:Border_Thick
xlsx.Format.Bottom.Format=XLSX:Border_DOUBLE
xlsx.SetFormat()
err#=xlsx.Merge(3,3,5,5)
Код: Выделить всё
xlsx.ClearFormat()
xlsx.Format.Border.Format=XLSX:Border_Thick
xlsx.Format.Bottom.Format=XLSX:Border_NONE
xlsx.SetFormat()
err#=xlsx.Merge(3,3,5,5)

Make Clarion Great Again ! 
libxlsxwriter for Clarion
Прошу завершить упражнения с форматированием, надо выдавать продукциюRaFaeL писал(а): 10 Январь 2018, 18:26Сначала применяются общие параметры ячейки, можно отдельные переопределить
Любить и обещать ничего не стоит
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
libxlsxwriter for Clarion
В интересах революции жертвы всегда оправданы ! 
Я тоже с десяток отчётов с утра подправил под обновление и не жужу ...

Я тоже с десяток отчётов с утра подправил под обновление и не жужу ...

Make Clarion Great Again ! 