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

libxlsxwriter for Clarion

Добавлено: 17 Февраль 2018, 21:34
vic7tar
Rafael, я имел ввиду изменения в сишной функции, все остальное остается как было.

libxlsxwriter for Clarion

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

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

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Добавлено: 17 Февраль 2018, 22:05
Игорь Столяров
Полностью согласен ! Если править оригинал (код C или класс Clarion) - это потерять возможность обновления.
Нет никаких проблем объявить свой метод на основе XLSX.WriteFormula, выполнить в нём Raplace формулы и вызвать PARENT метод ...

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Добавлено: 18 Февраль 2018, 13:32
Игорь Столяров
Кто-нибудь понял как работает последний параметр (Collapse) в методах SetRow / SetColumn ?
Или я один в пребываю в недоумении по этому поводу ? ;)

libxlsxwriter for Clarion

Добавлено: 19 Февраль 2018, 14:07
Игорь Столяров
Есть вопрос по денежным форматам Excel чисел ... Вот такой формат не проходит:

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

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

libxlsxwriter for Clarion

Добавлено: 19 Февраль 2018, 18:08
RaFaeL
Вероятно конвертация поможет, не учёл, попробуйте вот так

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

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

libxlsxwriter for Clarion

Добавлено: 19 Февраль 2018, 18:56
vic7tar
Наверно должно быть так:

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

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

libxlsxwriter for Clarion

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

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

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

libxlsxwriter for Clarion

Добавлено: 19 Февраль 2018, 19:35
vic7tar
Кому-нибудь пригодится - https://support.office.com/ru-ru/articl ... fab54be7f4

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 можно получить только с размером шрифта по умолчанию.
Иначе надо всегда рассчитывать и выставлять высоту строки в зависимости от длины текста и параметров шрифта.

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

libxlsxwriter for Clarion

Добавлено: 24 Февраль 2018, 20:23
RaFaeL
xlsx.ClearFormat()

libxlsxwriter for Clarion

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

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