libxlsxwriter for Clarion

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

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

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

libxlsxwriter for Clarion

Сообщение RaFaeL »

Артур писал(а): 29 Декабрь 2017, 11:56Вопрос: как создать worksheet c альбомной ориентацией и отрегулировать отступы на странице ?
Если не срочно, то немного подождать обновления
Аватара пользователя
Артур
Ветеран
Сообщения: 329
Зарегистрирован: 01 Июнь 2006, 12:33
Откуда: Новороссийск

libxlsxwriter for Clarion

Сообщение Артур »

RaFaeL писал(а): 29 Декабрь 2017, 13:27Если не срочно, то немного подождать обновления
Спасибо, подожду ..
Любить и обещать ничего не стоит
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Вроде добил до работающего результата. Вот в таком виде.

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

form_r  routine
  DATA
FsXLSXL    FsXLSX
  CODE

   FsXLSXL.init('1.xlsx','tmp')

   font1#=FsXLSXL.FontAdd(0,'Calibri',11)
   font2#=FsXLSXL.FontAdd(font1#,'',18,color:red,1)
   font3#=FsXLSXL.FontAdd(font1#,'',0,color:blue,0,1)

   fill1#=FsXLSXL.FillAdd('none')
   fill2#=FsXLSXL.FillAdd('gray125')
   fill3#=FsXLSXL.FillAdd('solid',color:yellow)
   fill4#=FsXLSXL.FillAdd('solid',color:red)

   bord1#=FsXLSXL.BorderAdd(0,0,0,0,0)
   bord2#=FsXLSXL.BorderAdd(1,1,1,1,0)

   style1#=FsXLSXL.StyleAdd(0)
   style2#=FsXLSXL.StyleAdd(0,0,0,2,1)
   style3#=FsXLSXL.StyleAdd(0,0,0,3,1)
   style4#=FsXLSXL.StyleAdd(0,0,1,0,0,'center','center')
   style5#=FsXLSXL.StyleAdd(0,0,2,0,0)

   FsXLSXL.WriteNumber(1,1,123.45,1)
   FsXLSXL.WriteNumber(2,1,346.67,1)
   FsXLSXL.WriteFormula(3,1,'SUM(A1:A2)',2)

   FsXLSXL.WriteString(3,3,'Здравствуй, Мир!',3)
   FsXLSXL.WriteString(7,7,'Девочки двоятся...',3)

   FsXLSXL.WriteUrl(7,1,'http://www.clarionlife.net',5)
   FsXLSXL.WriteUrl(9,1,'http://www.finsoftrz.ru',5)

   FsXLSXL.InsertImage(12,1,22,3,'tmp\image1.png')
   FsXLSXL.InsertImage(12,5,22,7,'tmp\image1.png')

   FsXLSXL.Merge(3,3,5,6)

   FsXLSXL.Make
   FsXLSXL.kill(1)

Вложения
primxlsx.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

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

libxlsxwriter for Clarion

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

Интересная особенность ... Если выполнить вот такой код:

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

         MyXLSX.Clear.Format()
         MyXLSX.Format.Picture  = '@n-14.0'
         MyXLSX.SetFormat()
         Loc:ErrorCode = MyXLSX.WriteNumber(1,1,123)
То в ячейке будет записано: "123.", а если задать формат ячейки через интерфейс Microsoft Excel,
как ЧИСЛОВОЙ с числом десятичных знаков = 0, то результат будет ожидаемым: "123"

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

libxlsxwriter for Clarion

Сообщение RaFaeL »

Вероятно, класс от Taboga лажает, посмотрю
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

А есть смысл заморачиваться с конвертацией форматов? Может, проще пользоваться экселевскими? Или на выбор. На всякий случай прикреплю список стандартных форматов, может, пригодится.

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

    if Self.AddFormat('General') = -1 then Break.                           !0
    if Self.AddFormat('0;-0') = -1 then Break.                              !1
    if Self.AddFormat('0.00;-0.00') = -1 then Break.                        !2
    if Self.AddFormat('#,##0;-#,##0') = -1 then Break.                      !3
    if Self.AddFormat('#,##0.00;-#,##0.00') = -1 then Break.                !4
    if Self.AddFormat('#,##0\ "$";\-#,##0\ "$"') = -1 then Break.           !5
    if Self.AddFormat('#,##0\ "$";[Red]\-#,##0\ "$"') = -1 then Break.      !6
    if Self.AddFormat('#,##0.00\ "$";\-#,##0.00\ "$"') = -1 then Break.     !7
    if Self.AddFormat('#,##0.00\ "$";[Red]\-#,##0.00\ "$"') = -1 then Break.!8
    if Self.AddFormat('0%') = -1 then Break.                                !9
    if Self.AddFormat('0.00%') = -1 then Break.                             !10
    if Self.AddFormat('0.00E+00') = -1 then Break.                          !11
    if Self.AddFormat('dd/mm/yy') = -1 then Break.                          !12
    if Self.AddFormat('dd/\ mmm\ yy') = -1 then Break.                      !13
    if Self.AddFormat('dd/\ mmm') = -1 then Break.                          !14
    if Self.AddFormat('mmm\ yy') = -1 then Break.                           !15
    if Self.AddFormat('h:mm\ AM/PM') = -1 then Break.                       !16
    if Self.AddFormat('h:mm:ss\ AM/PM') = -1 then Break.                    !17
    if Self.AddFormat('hh:mm') = -1 then Break.                             !18
    if Self.AddFormat('hh:mm:ss') = -1 then Break.                          !19
    if Self.AddFormat('dd/mm/yy\ hh:mm') = -1 then Break.                   !20
    if Self.AddFormat('##0.0E+0') = -1 then Break.                          !21
    if Self.AddFormat('mm:ss') = -1 then Break.                             !22
    if Self.AddFormat('@') = -1 then Break.                                 !23
    if Self.AddFormat('dd/mm/yyyy') = -1 then Break.                        !24
    if Self.AddFormat('0.0;-0.0') = -1 then Break.                          !25
    if Self.AddFormat('0.000;-0.000') = -1 then Break.                      !26
    if Self.AddFormat('0.0000;-0.0000') = -1 then Break.                    !27
    if Self.AddFormat('$#,##0.00;-$#,##0.00') = -1 then Break.              !28
    if Self.AddFormat('#,##0.00\ "р.";\-#,##0.00\ "р."') = -1 then Break.   !29
    if Self.AddFormat('#,##0.00\ "E";\-#,##0.00\ "E"') = -1 then Break.     !30
    if Self.AddFormat('#\ ##0;-#\ ##0') = -1 then Break.                      !31
    if Self.AddFormat('#\ ##0.00;-#\ ##0.00') = -1 then Break.                !32
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 30 Декабрь 2017, 13:29А есть смысл заморачиваться с конвертацией форматов?
Да ? И каким номером формата мне вывести число 1234.567890 или дату 03.12.2017 ?
Последний раз редактировалось Игорь Столяров 30 Декабрь 2017, 13:35, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Да, еще одна ошибочка в libxlsxwriter. Когда подключаются форматы вывода, в xml файле дублируются строки по количеству вызовов setFormat, как я понял. Хотя общее количество форматов указано верно. Вот такой фрагмент в xml файле стилей, думаю, понятно будет:

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

  <numFmts count="1">
    <numFmt numFmtId="164" formatCode="0.00;-0.00" />
    <numFmt numFmtId="164" formatCode="0.00;-0.00" />
  </numFmts>
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 30 Декабрь 2017, 13:34
finsoftrz писал(а): 30 Декабрь 2017, 13:29А есть смысл заморачиваться с конвертацией форматов?
Да ? И каким номером формата мне вывести число 1234.5678 или дату 03.12.2017 ?
Я так понимаю, что можно посмотреть в excel что ставит. В принципе, все равно это на выходе получается, только неявно. Где-то нормально, где-то некорректно. А если формат не вручную указывается, а считывается из бланка? Или мы заранее готовим набор нужных форматов, чтобы не заморачиваться с их созданием в прикладном коде? Я и говорю, что неплохо было бы оба варианта иметь. Хотя мне достаточно без конвертации.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 30 Декабрь 2017, 13:41Я и говорю, что неплохо было бы оба варианта иметь.
А вот с этим согласен. Хотя при наличии конвертера форматов, список указанный Вами является рудиментом.
И есть еще один момент: внутренний список форматов зависим от региональных настроек Windows.
Т.е. если Вы хотите, что бы у Вас в отчёте всегда выводилось именно "1 234.567890", то лучше им не пользоваться.
И что в итоге ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

В excel есть предопределенный набор форматов и пользовательский. Никто не запрещает создавать свои форматы, если стандартные по каким-то причинам не подходят. По хорошему, лучше изначально стилизовать все и при выводе просто выбирать вид формата Сумма, Количество и т.п., прибегая к явному форматированию только в редких случаях.
Да, и от региональных настроек винды давно уже все отвязано, есть аналогичная настройка в excel.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

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

libxlsxwriter for Clarion

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

finsoftrz писал(а): 30 Декабрь 2017, 13:59В сухом остатке для базового функционала надо бы еще группировку строк подключить.
Да, это нужный функционал. Он уже обозначен в описании libxlsxwriter, думаю, что мы его увидим в ближайших релизах. :)
Я для теста сделал при экспорте формирование очереди с номерми начала и хвоста групп строк, потом открытие XLSX файла через OLE и выполнение группировки строк.
Работает прекрасно - если нужно. Но лично меня такой гамбит не устраивает. Подождём-с ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Если бы посмотреть файлик с группировками строк... К сожалению, у меня кроме этой либы другого стороннего софта для записи xlsx нет и ставить неохота...
C6/C11, ШВС, tps/btrieve.
Ответить