libxlsxwriter for Clarion

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

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

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

libxlsxwriter for Clarion

Сообщение vic7tar »

Rafael, я имел ввиду изменения в сишной функции, все остальное остается как было.
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

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

Непривычно и т.д. (особенно если есть ввод формул пользователями) - это конечно да.
В общем случае, в формулах могут быть символьные строки, внутри которых ";" и ',' - распрарсить всё это можно, но сложно.
Наверно лучше подменять разделители на этапе сборки формулы, когда известны её компоненты (что в общем-то я и сделал).
Прямого чтения XLSX пока нет - а значит и нет проблем с тем как внутри XML эти формулы хранятся. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

vic7tar писал(а): 17 Февраль 2018, 21:34Rafael, я имел ввиду изменения в сишной функции, все остальное остается как было.
Если и подменять, то перед передачей в сишную функцию, но Игорь уже ответил, что могут быть нюансы. Сам функции я править не буду, библиотека собирается по оригиналу, который скачивается после каждого коммита заново. В принуипе, можете поправить и собрать себе, тоже никто не мешает...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

Полностью согласен ! Если править оригинал (код C или класс Clarion) - это потерять возможность обновления.
Нет никаких проблем объявить свой метод на основе XLSX.WriteFormula, выполнить в нём Raplace формулы и вызвать PARENT метод ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar »

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

libxlsxwriter for Clarion

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

Кто-нибудь понял как работает последний параметр (Collapse) в методах SetRow / SetColumn ?
Или я один в пребываю в недоумении по этому поводу ? ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

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

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

         XLSX.Format.ExcelMask =  '# ##0р.;-# ##0р.'
         XLSX.SetFormat()
         
         i# = XLSX.WriteNumber(1,1,1)
Это связано с тем, что маску формата тоже надо конвертировать в UTF-8 или
форматы с русскими буквами в принципе не поддерживаются ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

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

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

      if clip(SELF.Format.ExcelMask)<>''
        SELF.ConvertToUTF8(SELF.Format.ExcelMask)
        format_set_num_format(SELF.FormatQ.Ref,SELF.Cstr)
      end
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar »

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

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

XLSX.Format.ExcelMask =  '# ##0"p.";-# ##0"p."'
С латинской p все проходит. Значит...
C10, Win10x64
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

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

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

 '#,##0.0000"p.";-#,##0.0000"p."'
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar »

Кому-нибудь пригодится - https://support.office.com/ru-ru/articl ... fab54be7f4
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

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

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

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

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

Корректную работу WrapText можно получить только с размером шрифта по умолчанию.
Иначе надо всегда рассчитывать и выставлять высоту строки в зависимости от длины текста и параметров шрифта.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

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

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

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

            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
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

xlsx.ClearFormat()
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libxlsxwriter for Clarion

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

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

Если применять ClearFormat() - то придётся для каждой ячейки заново устанавливать все параметры экспорта.
А вот это уже совсем не весело. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить