libxlsxwriter for Clarion

Программы на Clarion, шаблоны, библиотеки и пр.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar » 17 Февраль 2018, 21:34

Rafael, я имел ввиду изменения в сишной функции, все остальное остается как было.
C10, Win10x64

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 17 Февраль 2018, 21:45

RaFaeL писал(а):
17 Февраль 2018, 21:30
Хотя я подумаю
Я тоже думал в этом направлении ... Вопрос скользкий, не стал делать.
Библиотека экспорта в XLSX здесь не причём, иначе бы это реализовали в питоне и базовой DLL.

Непривычно и т.д. (особенно если есть ввод формул пользователями) - это конечно да.
В общем случае, в формулах могут быть символьные строки, внутри которых ";" и ',' - распрарсить всё это можно, но сложно.
Наверно лучше подменять разделители на этапе сборки формулы, когда известны её компоненты (что в общем-то я и сделал).
Прямого чтения XLSX пока нет - а значит и нет проблем с тем как внутри XML эти формулы хранятся. ;)
«V» значит Вендетта !

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

libxlsxwriter for Clarion

Сообщение RaFaeL » 17 Февраль 2018, 21:57

vic7tar писал(а):
17 Февраль 2018, 21:34
Rafael, я имел ввиду изменения в сишной функции, все остальное остается как было.
Если и подменять, то перед передачей в сишную функцию, но Игорь уже ответил, что могут быть нюансы. Сам функции я править не буду, библиотека собирается по оригиналу, который скачивается после каждого коммита заново. В принуипе, можете поправить и собрать себе, тоже никто не мешает...

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 17 Февраль 2018, 22:05

Полностью согласен ! Если править оригинал (код C или класс Clarion) - это потерять возможность обновления.
Нет никаких проблем объявить свой метод на основе XLSX.WriteFormula, выполнить в нём Raplace формулы и вызвать PARENT метод ...
«V» значит Вендетта !

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar » 17 Февраль 2018, 23:05

Игорь Столяров писал(а):
17 Февраль 2018, 22:05
Полностью согласен ! Если править оригинал (код C или класс Clarion) - это потерять возможность обновления.
А в чем потери обновления?
При очередном обновлении просто заменять в worksheet.c переделанную функцию worksheet_write_formula.
Игорь Столяров писал(а):
17 Февраль 2018, 21:45
В общем случае, в формулах могут быть символьные строки, внутри которых ";" и ',' - распрарсить всё это можно, но сложно.
Полностью согласен.
Ладно, запятая так запятая, ничего страшного.
C10, Win10x64

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

libxlsxwriter for Clarion

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

Кто-нибудь понял как работает последний параметр (Collapse) в методах SetRow / SetColumn ?
Или я один в пребываю в недоумении по этому поводу ? ;)
«V» значит Вендетта !

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 19 Февраль 2018, 14:07

Есть вопрос по денежным форматам Excel чисел ... Вот такой формат не проходит:

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

         XLSX.Format.ExcelMask =  '# ##0р.;-# ##0р.'
         XLSX.SetFormat()
         
         i# = XLSX.WriteNumber(1,1,1)
Это связано с тем, что маску формата тоже надо конвертировать в UTF-8 или
форматы с русскими буквами в принципе не поддерживаются ?
«V» значит Вендетта !

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

libxlsxwriter for Clarion

Сообщение RaFaeL » 19 Февраль 2018, 18:08

Вероятно конвертация поможет, не учёл, попробуйте вот так

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

      if clip(SELF.Format.ExcelMask)<>''
        SELF.ConvertToUTF8(SELF.Format.ExcelMask)
        format_set_num_format(SELF.FormatQ.Ref,SELF.Cstr)
      end

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar » 19 Февраль 2018, 18:56

Наверно должно быть так:

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

XLSX.Format.ExcelMask =  '# ##0"p.";-# ##0"p."'
С латинской p все проходит. Значит...
C10, Win10x64

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

libxlsxwriter for Clarion

Сообщение RaFaeL » 19 Февраль 2018, 19:10

Да, с конвертацией работает, но вылез еще нюанс - тока заменяется на запятую. Чтобы была точка надо брать в кавычки

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

 '#,##0.0000"p.";-#,##0.0000"p."'

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar » 19 Февраль 2018, 19:35

Кому-нибудь пригодится - https://support.office.com/ru-ru/articl ... fab54be7f4
C10, Win10x64

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

libxlsxwriter for Clarion

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

Всё-таки есть интересная диллема с формированием XLSX файлов прямой записью (не только LibXLSXWriter)
при экспорте многострочного текста (WrapText).

1. Что бы в Microsoft Excel корректно отрабатывал высоту строки по длине текста - нельзя выставлять высоту строки.
2. Если не выставлять высоту строки, то высота одострочной строки ВСЕГДА (!!!) XLSX:DEF_ROW_HEIGHT = 15

3. Это хорошо работает с размером шрифта по умолчанию (FontSize = 11), но если выставить, например FontSize = 6,
то всё будет плохо: высота одиночной строки значительно превосходит высоту шрифта .... :(

Т.е., как говорят шахматисты - мы здесь "попадаем на вилку" ... :)

Корректную работу WrapText можно получить только с размером шрифта по умолчанию.
Иначе надо всегда рассчитывать и выставлять высоту строки в зависимости от длины текста и параметров шрифта.
«V» значит Вендетта !

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 24 Февраль 2018, 19:54

Имею желание работать с форматами чисел, но не имею возможности ... :)

Выполняем потешный код:

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

            xlsx.ClearFormat()
            err#=xlsx.WriteNumber(3,1,123)

            xlsx.Format.Picture='@n12.2'
            xlsx.SetFormat()

            err#=xlsx.WriteNumber(4,1,123)

            xlsx.Format.Picture=''
            xlsx.SetFormat()

            err#=xlsx.WriteNumber(5,1,123)
Получается как на картинке. Разве в пятой строке формат числа не должен вернуться к значению по умолчанию ?
Заранее спасибо за содействие ! :)

123.jpg
«V» значит Вендетта !

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

libxlsxwriter for Clarion

Сообщение RaFaeL » 24 Февраль 2018, 20:23

xlsx.ClearFormat()

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

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 24 Февраль 2018, 20:36

RaFaeL писал(а):
24 Февраль 2018, 20:23
xlsx.ClearFormat()
Это и ежу понятно ... :) Принцип библиотеки LibXLSX в последовательной записи ячеек.
Мы выставляем шрифт, цвет, размер, стиль и начинаем записывать числа в ячейки.
При необходимости, для различных показателей, изменяя точность и формат отображения.
Если я не знаю какая точность у показателя - просто сбрасываю формат и будут показаны все значащие
цифры в дробной части. И здесь прекрасная и понятная идея Excel и LibXLSXWriter. Вопрос за её реализацией.

Если применять ClearFormat() - то придётся для каждой ячейки заново устанавливать все параметры экспорта.
А вот это уже совсем не весело. :(
«V» значит Вендетта !

Ответить