libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 09 Январь 2018, 16:08

finsoftrz писал(а):
09 Январь 2018, 16:03
Ок, не буду больше мешать...
Огромное спасибо ! Вы не мешаете, просто в магазине - продуктовое, в аптеке - лекарства и т.д.
А у нас сельпо какое-то получается. Тем более, что Вы отвечаете на мой вопрос по libxlsxwriter со
ссылкой на свою библиотеку, которую никто кроме Вас не видел. Какая польза от этого ?

Заведите тему, выложите библиотеку, её можно будет поюзать, обсудить и понять описываемые Вами структуры.
Если Вы конечно сами этого хотите. Это - нормально ...
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1394
Зарегистрирован: 06 Ноябрь 2014, 12:48

libxlsxwriter for Clarion

Сообщение finsoftrz » 09 Январь 2018, 16:22

Вы не так поняли. Эта структура соответствует представлению в xlsx формате. Я просто скопировал ее из своего класса, чтобы было понятнее. В libxlsxWriter некоторые вещи трактуются достаточно своеобразно. Ладно, все, перехожу в readonly... :-)
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 09 Январь 2018, 16:25

finsoftrz писал(а):
09 Январь 2018, 16:22
Ладно, все, перехожу в readonly...
И напрасно ! Ваши замечания и рекомендации (когда они в тему обсуждаемого вопроса) - очень полезны. :)
«V» значит Вендетта !

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

libxlsxwriter for Clarion

Сообщение zmi » 09 Январь 2018, 16:54

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

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 909
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 09 Январь 2018, 17:11

Установка форматов работает, если установлен шаблон Taboga Native Excel, используется TPictureClass оттуда, который конвертирует кларионовский шаблон в экселевский. Поскольку эта штука номинально платная и на нее у кого-то есть авторские права, в комплекте с оберткой для libxlsxwriter не поставляется

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

libxlsxwriter for Clarion

Сообщение zmi » 10 Январь 2018, 9:39

Судя по тексту при отсутствии Taboga Native Excel, если я укажу в xlsx.Format.Picture='@n-14.0' прямо эксельный формат, то должно сработать. Никто не подскажет, чего туда засунуть для отображения знака числа и двух цифирек после запятой? :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 10 Январь 2018, 10:13

Можно ли предложить для рассмотрения простой вариант решения вопроса с прорисовкой линий сетки ?

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

! --- 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
 ...
Работы на 2 минуты, полная совместимость с предыдущим кодом. Теперь:

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

            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)

рисует комбинированную рамку на любой вкус:

test.jpg
test.jpg (8.39 КБ) 1101 просмотр
Заранее спасибо за рассмотрение ! :)
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 909
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 10 Январь 2018, 10:51

zmi писал(а):
10 Январь 2018, 9:39
Судя по тексту при отсутствии Taboga Native Excel, если я укажу в xlsx.Format.Picture='@n-14.0' прямо эксельный формат, то должно сработать. Никто не подскажет, чего туда засунуть для отображения знака числа и двух цифирек после запятой?
Сейчас не сработает, но я уже немного переделал этот кусок, можно будет напрямую указывать экселевский формат

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 909
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 10 Январь 2018, 12:17

Игорь Столяров писал(а):
10 Январь 2018, 10:13
Можно ли предложить для рассмотрения простой вариант решения вопроса с прорисовкой линий сетки ?
Понял что нужно, пока не определился, как лучше сделать. Там еще и с цветами линий то же самое

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 10 Январь 2018, 12:31

RaFaeL писал(а):
10 Январь 2018, 12:17
Там еще и с цветами линий то же самое
Ну да. Я просто как чукча: что вижу - то и пою. :)
Пробую рисовать обычные обычные отчёты - а они печатаются на чёрно-белом принтере, поэтому раскраску не использую.
А вот выделение видом сетки - полезная опция (на мой субъективный взгляд). Спасибо !
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 909
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 10 Январь 2018, 18:26

ОК, для полной функциональности библиотеки придется отказаться от стилей, будут просто значения, что заполните, то и применится. Сначала применяются общие параметры ячейки, можно отдельные переопределить
Последний раз редактировалось RaFaeL 13 Январь 2018, 14:45, всего редактировалось 1 раз.

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

libxlsxwriter for Clarion

Сообщение zmi » 10 Январь 2018, 20:45

Спасибо. С форматирование прелестненько получилось.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 11 Январь 2018, 8:48

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)
Но так как XLSX:Border_NONE = 0, то действие xlsx.Format.Bottom.Format=XLSX:Border_NONE игнорируется. :(
«V» значит Вендетта !

Аватара пользователя
Артур
Ветеран
Сообщения: 314
Зарегистрирован: 01 Июнь 2006, 11:33
Откуда: Новороссийск

libxlsxwriter for Clarion

Сообщение Артур » 11 Январь 2018, 9:34

RaFaeL писал(а):
10 Январь 2018, 18:26
Сначала применяются общие параметры ячейки, можно отдельные переопределить
Прошу завершить упражнения с форматированием, надо выдавать продукцию
Любить и обещать ничего не стоит

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 11 Январь 2018, 10:17

В интересах революции жертвы всегда оправданы ! :)
Я тоже с десяток отчётов с утра подправил под обновление и не жужу ... ;)
«V» значит Вендетта !

Ответить