libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
- Вложения
-
- libxlsxwriter.zip
- Версия 1.5 от 30.12.2021 на основе библиотеки 1.1.4
- (276.26 КБ) 1029 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Если есть другие параметры формата, то сработает через очистку картинки. В примере проблема в том, что формат получается пустой
libxlsxwriter for Clarion
Ширина и высота строки зависят от параметров шрифта и его размера, их спокойно можно вычислять. А вот с определением ширины и высоты ячейки (строки и колонки) - тут проблемки, вернее отсутствие информации. Если вписать в ячейку какой-нибудь текст, то внутри ячейки присутствуют внутренние отступы текста от границ ячейки (слева или справа, сверху или снизу), которые явно зависят от размера шрифта и формата ячейки (левого или правого горизонтального выравнивания с n отступами, вертикального выравнивания).Игорь Столяров писал(а): 22 Февраль 2018, 8:11...Корректную работу WrapText можно получить только с размером шрифта по умолчанию.
Иначе надо всегда рассчитывать и выставлять высоту строки в зависимости от длины текста и параметров шрифта.
По каким правилам рассчитываются эти отступы? - выясняю уже неделю, пока бес толку.
C10, Win10x64
- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
OK ! Это решило бы вопрос. Подскажите пожалуйста, а как выполнить эту самую очистку картинки ?
Можно ли хотеть метод ClearPicture(), который сбросил бы параметры картинки, но оставил бы другие настройки формата ?
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Загадка - шутка для всех ценителей сабжа ! 
Почему приведённый ниже безобидный код валит экспорт в XLSXWriter ?

Почему приведённый ниже безобидный код валит экспорт в XLSXWriter ?
Код: Выделить всё
...
Loc:R1 Real(0)
Loc:R2 Real(0)
CODE
...
xlsx.ClearFormat()
err#=xlsx.WriteNumber(1,1,Loc:R1 / Loc:R2)
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5169
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
Метод WriteNumber валится? Или где-то дальше?
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Нет. Всё прекрасно и молча отрабатывается.
Вот только полученный XLSX файл является некорректным и не открывается Microsoft Excel.
Возможно, что-то с неправильной передачей данных непосредственно в DLL XLSXWriter,
потому что число передаётся в метод по значению и вот так всё работает:
Код: Выделить всё
xlsx.ClearFormat()
err#=xlsx.WriteNumber(1,1, 0 / 0)
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5169
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
Библиотека честно пишет в файл значок бесконечности. А Эксель его не воспринимает.
А если без шуток, то результат деления на ноль в Кларионе ноль. Или я не прав? Если прав, то любой ноль должен давать такой результат. Проверьте.

А если без шуток, то результат деления на ноль в Кларионе ноль. Или я не прав? Если прав, то любой ноль должен давать такой результат. Проверьте.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Нет, нет, нет ! Ноль прекрасно записывается, с этим нет никаких проблем.
Чек внутри метода тоже показывает, что переменная содержит 0 (ноль) на момент вызова функции из DLL ...
Но вот дальше, что-то происходит ...

Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5169
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
А 0.0000000001? Или 0.1E-15? Если тупо сделать round(Loc:R1 / Loc:R2, 0.0000000001)? Ненаучно! Да. Но чудес не бывает, число ведь вещественное. Получается, что не чистый ноль.Игорь Столяров писал(а): 27 Февраль 2018, 17:53 Ноль прекрасно записывается, с этим нет никаких проблем.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Или не совпадение типов данных при вызове процедуры из DLL ...
REAL - вообще самый неприятный тип данных, везде реализован с какими-то оговорками ....

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Скорее всего, она не содержит 0, а просто выводится 0 когда вы пытаетесь ее прочитать, а внутри там в этот момент неопределенность, которая и передается в библиотеку и затем пишется в файл
https://ru.wikipedia.org/wiki/NaN
Поскольку здесь https://libxlsxwriter.github.io/workshe ... e8580c2289 написано что Эксель не поддерживает неопределенности но по IEEE-754 они допустимы, считаю что это не глюк а фича, проверять надо, что на что делим )) Или хотя бы сначала рассчитывать, потом передавать
Но пример интересный
https://ru.wikipedia.org/wiki/NaN
Поскольку здесь https://libxlsxwriter.github.io/workshe ... e8580c2289 написано что Эксель не поддерживает неопределенности но по IEEE-754 они допустимы, считаю что это не глюк а фича, проверять надо, что на что делим )) Или хотя бы сначала рассчитывать, потом передавать
Но пример интересный
- Игорь Столяров
- Ветеран движения
- Сообщения: 8069
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
И вроде бы да .... но есть 3 нюанса ... Забудем пока про LibXLSXWriter, смотрим со стороны Clarion.
1. Насколько я помню, нигде в документации на Clarion не указано, что что при делении на ноль в REAL записывается
неопределённость. Или тогда должна была быть проверка на эту неопределённость, что-то вроде проверки адреса на NULL.
2. Очень странно, что округление "неопределённости" до любой точности всегда даёт в результате явный ноль.
Не предельно минимальное / максимальное значение для этого типа данных, а именно конкретный ноль.
3. При использовании типа данных LONG в том же примере никаких неопределённостей не возникает.
Просто ноль и никаких проблем с LibXLSXWriter.
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
В Clarion вообще сложности с обработкой всяких "ситуаций". К примеру, примитивного переполнения от +=1 при бесконечном цикле
Это я только кажусь дураком! На самом деле я полный идиот!