Если не срочно, то немного подождать обновления
libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
Вроде добил до работающего результата. Вот в таком виде.
Код: Выделить всё
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)
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
По скорости 40 тыс чисел почти мгновенно, а 400 тыс уже оптимизировать надо, разбив запись на диск из буфера в памяти на несколько итераций с дозаписью файла. Как нибудь на досуге попробую...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7378
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libxlsxwriter for Clarion
Интересная особенность ... Если выполнить вот такой код:
То в ячейке будет записано: "123.", а если задать формат ячейки через интерфейс Microsoft Excel,
как ЧИСЛОВОЙ с числом десятичных знаков = 0, то результат будет ожидаемым: "123"
Главное: это не проблема, просто некая особенность о которой полезно знать ...
Код: Выделить всё
MyXLSX.Clear.Format()
MyXLSX.Format.Picture = '@n-14.0'
MyXLSX.SetFormat()
Loc:ErrorCode = MyXLSX.WriteNumber(1,1,123)
как ЧИСЛОВОЙ с числом десятичных знаков = 0, то результат будет ожидаемым: "123"
Главное: это не проблема, просто некая особенность о которой полезно знать ...
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
А есть смысл заморачиваться с конвертацией форматов? Может, проще пользоваться экселевскими? Или на выбор. На всякий случай прикреплю список стандартных форматов, может, пригодится.
Код: Выделить всё
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
Да ? И каким номером формата мне вывести число 1234.567890 или дату 03.12.2017 ?
Последний раз редактировалось Игорь Столяров 30 Декабрь 2017, 13:35, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
Да, еще одна ошибочка в 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
Я так понимаю, что можно посмотреть в excel что ставит. В принципе, все равно это на выходе получается, только неявно. Где-то нормально, где-то некорректно. А если формат не вручную указывается, а считывается из бланка? Или мы заранее готовим набор нужных форматов, чтобы не заморачиваться с их созданием в прикладном коде? Я и говорю, что неплохо было бы оба варианта иметь. Хотя мне достаточно без конвертации.Игорь Столяров писал(а): ↑30 Декабрь 2017, 13:34Да ? И каким номером формата мне вывести число 1234.5678 или дату 03.12.2017 ?
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7378
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libxlsxwriter for Clarion
А вот с этим согласен. Хотя при наличии конвертера форматов, список указанный Вами является рудиментом.
И есть еще один момент: внутренний список форматов зависим от региональных настроек Windows.
Т.е. если Вы хотите, что бы у Вас в отчёте всегда выводилось именно "1 234.567890", то лучше им не пользоваться.
И что в итоге ?
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
В excel есть предопределенный набор форматов и пользовательский. Никто не запрещает создавать свои форматы, если стандартные по каким-то причинам не подходят. По хорошему, лучше изначально стилизовать все и при выводе просто выбирать вид формата Сумма, Количество и т.п., прибегая к явному форматированию только в редких случаях.
Да, и от региональных настроек винды давно уже все отвязано, есть аналогичная настройка в excel.
Да, и от региональных настроек винды давно уже все отвязано, есть аналогичная настройка в excel.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
В сухом остатке для базового функционала надо бы еще группировку строк подключить. Наверно, еще графики не помешали бы, если это не очень сложно. А потом уже самое интересное можно прикручивать - вывод из list, работа по готовым бланкам...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7378
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libxlsxwriter for Clarion
Да, это нужный функционал. Он уже обозначен в описании libxlsxwriter, думаю, что мы его увидим в ближайших релизах.
Я для теста сделал при экспорте формирование очереди с номерми начала и хвоста групп строк, потом открытие XLSX файла через OLE и выполнение группировки строк.
Работает прекрасно - если нужно. Но лично меня такой гамбит не устраивает. Подождём-с ...
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
Если бы посмотреть файлик с группировками строк... К сожалению, у меня кроме этой либы другого стороннего софта для записи xlsx нет и ставить неохота...
C6/C11, ШВС, tps/btrieve.