libxlsxwriter for Clarion
Программы на 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 КБ) 1050 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
RaFaeL
libxlsxwriter for Clarion
А нужно '<13,10>' в строке? Попробуй просто '<10>', многим программам и этого хватает...
Yufil
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
В библиотеке функция lxw_escape_control_characters меняет коды с 01 по 1F на "_x%04X_". Зачем - не знаю, спросите у автора на гитхабе
RaFaeL
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
Конечно попробовал ! Всё вроде бы (!!!) работает.

Но тогда строка с переносом в XLSX не соответствует экселовскому аналогу, что неизвестно где аукнется.

Make Clarion Great Again ! 
Игорь Столяров
RaFaeL
libxlsxwriter for Clarion
Кларионовский парсер XML в секции CDATA сам превращает '<13,10>' в '<10>', после парсинга приходится вставлять перенос обратно. Скорее всего, это фича парсера
Yufil
-
- ✯ Ветеран ✯
- Сообщения: 5190
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
Меня что-то переклинило. XML прекрасно понимает <13> и <10>. В html, наверно, то, что я написал.kreator писал(а): 15 Март 2018, 12:44Игорь, а ничего не путаешь? В классическом xml символ '<13>' - '<br />'. У SV в классах есть преобразования специфических символов. Я сделал себе простую функцию преобразования кларионовской строки в xml строку на их основе.

We are hard at work… for you. 

kreator
libxlsxwriter for Clarion
А что значит "XML понимает"? Вот я вывожу XML-файл и в нём фрагмент
Потом парсю файл родным кларионовским парсером. и с удивлением вижу, что в поле <prog> переносы строки <13,10> заменились на <10>
Код: Выделить всё
<embed type="100">
<prog><![CDATA[select _hyper22
_document='CH2_1'
_hide=0
select ?Flash28
_hide=1
_fla2=1
_k=1
For _i=1 to 2
select ?Prompt{_i}
If _k={_i}
_Color=080H
_FontBold=1
elsIf _Color=080H
_Color=0808080H
end
End
]]></prog></embed>
Yufil
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
OK ! Если все живы, тогда предлагаю от разминки перейти собственно к делу .... 
Выполняем код:
Получаем результат:
Современная наука может объяснить содержимое ячейки A1 ?
Уточнение: проблема проявляется только в Apache Calc, в Microsoft Excel - всё OK !
Проблема исчезнет, если уменьшить цикл до 10 ... Класс !

Выполняем код:
Код: Выделить всё
err#=xlsx.WriteString(1,1,'12345<10>67890')
Loop j# = 2 to 40
err#=xlsx.WriteString(j#,1,j#)
end
Современная наука может объяснить содержимое ячейки A1 ?
Уточнение: проблема проявляется только в Apache Calc, в Microsoft Excel - всё OK !
Проблема исчезнет, если уменьшить цикл до 10 ... Класс !

Make Clarion Great Again ! 
Игорь Столяров
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
Я поясню предыдущий вопрос ... Дело в том, что это не "высосанная из пальца" проблема,
а формализованная демонстрация достаточно серьёзной ошибки.
Первая строчка - это шапка таблицы, в которой есть перенос строк. Цикл - экспорт самой таблицы.
Т.е. валится экспорт любой (!!!) таблицы, в заголовке или шапке которой есть принудительное разбиение на строки.
а формализованная демонстрация достаточно серьёзной ошибки.
Первая строчка - это шапка таблицы, в которой есть перенос строк. Цикл - экспорт самой таблицы.
Т.е. валится экспорт любой (!!!) таблицы, в заголовке или шапке которой есть принудительное разбиение на строки.

Make Clarion Great Again ! 
Игорь Столяров
-
- ✯ Ветеран ✯
- Сообщения: 5190
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
Я так понимаю - библиотека не гарантирует совместимости созданного файла с другими программами, кроме самого Экселя? А ведь идея - формировать файл без каких-либо доп. средств. В общем, пока грустновато. Может у разработчиков найдётся время для адаптации не под Эксель. А файл с такими наворотами, пересохранённый самим Экселем, читается Калком?
We are hard at work… for you. 

kreator
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
Вот это не факт ... Microsoft Excel вполне может просто корректировать некоторые явные проблемы в структуре XLSX файла.kreator писал(а): 16 Март 2018, 14:07библиотека не гарантирует совместимости созданного файла с другими программами, кроме самого Экселя?
Помните, мы разбирали, что-то подобное, если для строки явно не указана высота ?
Или, если сделать ошибку в структуре XLSX (например пересечение диапазонов MERGE), то Calc - просто клинит,
а Excel выдаёт ошибку, но пытается показать таблицу без проблемной ячейки или области ячеек ...
Да. Главный плюс XLSXWriter - это возможность создавать отчёты без коммерческого офисного пакета Microsoft Office
или платной библиотеки, например, EasyOpenOffice (в которой, кстати, то же есть не решённые проблемы).
Поэтому хотелось бы понять, что происходит. Но вряд ли такой очевидный глюк именно в самом Calc ...
Make Clarion Great Again ! 
Игорь Столяров
- Дед Пахом
- Старичок
- Сообщения: 3306
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 51 раз
- Контактная информация:
libxlsxwriter for Clarion
Если в OO Calc сохранить в формате sxc (примерно то же, что xlsx), то ячейка с переносом кодируется так:
Код: Выделить всё
-<table:table-cell table:value-type="string">
<text:p>Line1</text:p>
<text:p>Line2</text:p>
</table:table-cell>
С уважением, ДП
Дед Пахом
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
Да можно проще. Также кодируется перенос внутри ODS если создать его в Calc.

В XLSX, созданном Microsoft Excel, перенос строки кодируется обычными <13,10> (см. ниже, я об этом писал).
XLSXWriter делает какую-то манипуляцию с заменой этих кодов на служебные символы, и именно здесь что-то и просходит.

Microsoft Excel эту замену понимает, а Calc - нет. Наверно в этой замене есть какой-то тайный смысл, я не знаю ....
Make Clarion Great Again ! 
Игорь Столяров
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
А как кодируется перенос в xlsx созданном и сохраненном в Calc?Игорь Столяров писал(а): 16 Март 2018, 15:13В XLSX, созданном Microsoft Excel, перенос строки кодируется обычными <13,10> (см. ниже, я об этом писал).
RaFaeL
- Игорь Столяров
- Ветеран движения
- Сообщения: 8090
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
libxlsxwriter for Clarion
Традиционный Apache Calc XLSX только читает, а Libre Calc записывает вот так: <si><t xml:space="preserve">12345 67890</t></si>
(перенос между 5 и 6). XLSX файл прикрепляю к сообщению.
Но XLSX файлы созданные в Microsoft Excel, с преносом <13,10> - прекрасно открываются везде ...
- Вложения
-
- LibreCalc.zip
- (4.19 КБ) 145 скачиваний
Make Clarion Great Again ! 
Игорь Столяров
Вернуться в «Готовые программы, шаблоны, библиотеки...»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)