Страница 14 из 61

libxlsxwriter for Clarion

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

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

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 КБ) 2511 просмотров
Заранее спасибо за рассмотрение ! :)

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Добавлено: 10 Январь 2018, 18:26
RaFaeL
ОК, для полной функциональности библиотеки придется отказаться от стилей, будут просто значения, что заполните, то и применится. Сначала применяются общие параметры ячейки, можно отдельные переопределить

libxlsxwriter for Clarion

Добавлено: 10 Январь 2018, 20:45
zmi
Спасибо. С форматирование прелестненько получилось.

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 игнорируется. :(

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Добавлено: 11 Январь 2018, 10:17
Игорь Столяров
В интересах революции жертвы всегда оправданы ! :)
Я тоже с десяток отчётов с утра подправил под обновление и не жужу ... ;)