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 КБ) 1031 скачивание
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Посмотрел. Действительно, теряется при конвертации в Юникод и только если единичный символ и только этот (ну может еще какие, конечно, всю таблицу не проверял). Я не знаю почему так, нужна помощь залаИгорь Столяров писал(а): 04 Январь 2018, 0:45 Ещё необъяснимый фортель библиотеки ... Если выполнить код:
err# = xlsx.WriteString(13,1,'№')
то строка 13 будет пустая. Подозреваю, что проблема где-то с конвертации в UTF, потому что
при вводе напрямую в Microsoft Excel или при экспорте через OLE символ '№' нормально записывается в ячейку.
Не смертельно ... но непонятно !
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Ну Вы вспомнили ... Этот рубеж давно пройден.RaFaeL писал(а): 11 Февраль 2018, 22:14Действительно, теряется при конвертации в Юникод и только если единичный символ

Код: Выделить всё
ErrorCode = XLSX.WriteString(13, 1, '№<133>')
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Не надо. Мы сами.

Только насколько я помню, там проблема не с конвертацией в UTF-8, а что-то в недрах worksheet_write_string() ....
Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Нет, это именно конвертация, я посмотрел, WideCharToMultiByte возвращает нули. Дело в том, что оно сейчас много где используется. Практически любые веб-сервисы принимают только UTF-8. Надо бы разобраться. Может флаги какие выставить, но не подобрал
P.S. На самом деле WideCharToMultiByte возвращает ошибку 122 нехватка памяти, ему надо 3 байта на запись. Если дать 3 байта пишет туда нечто, портящее xlsx
P.S. На самом деле WideCharToMultiByte возвращает ошибку 122 нехватка памяти, ему надо 3 байта на запись. Если дать 3 байта пишет туда нечто, портящее xlsx
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
У меня (не XLSXWriter) символ номера конвертируется в UTF корректно (проверил).
И не согласная я с Вашим вариантом конвертации в UTF ...

Попробуйте пожалуйста вот это:
Код: Выделить всё
lenWideChar = XLSX:MultiByteToWideChar(in_,0,strInpChar,l,strWideChar,l*2)
Код: Выделить всё
Module('Windows')
GetACP(),RAW,USHORT,PASCAL
end
lenWideChar = XLSX:MultiByteToWideChar(GetACP(),0,strInpChar,l,strWideChar,l*2)
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
И ещё по конвертации в UTF: Вы используете CString для UTF-8, а в нём не запрещён символ "<0>" внутри строки.
Посмотрите пожалуйста, как сделан метод ConvertToCodePage() в библиотеке LIBCURL ....
Посмотрите пожалуйста, как сделан метод ConvertToCodePage() в библиотеке LIBCURL ....
Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
При вызове процедуры всегда передается 0, а если передать 0 то уже внутри MultiByteToWideChar идет вызов текущей страницы, т.е. это то же самое. Ладно, еще покопаю. Где-то тут есть недочет какой-то. Я эту процедуру изначально не сам писал, выдернул из почтовой библиотекиИгорь Столяров писал(а): 12 Февраль 2018, 8:17 И не согласная я с Вашим вариантом конвертации в UTF ...
Попробуйте пожалуйста вот это:
...
заменить на
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Сегодня библиотеке исполняется годик, поздравляем!
Обновил шапку. Собрал на основе версии 0.7.6. Дополнительно поправлена проблема №147. Это уже версия 0.9.9 она же RC2. Осталось разобраться с кодировками
Обновил шапку. Собрал на основе версии 0.7.6. Дополнительно поправлена проблема №147. Это уже версия 0.9.9 она же RC2. Осталось разобраться с кодировками
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Ура ! Поздравляю ! 
Ваш проект показал отличную динамику в развитии за этот год.

Ваш проект показал отличную динамику в развитии за этот год.

Make Clarion Great Again ! 
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
С кодировками разобрался. Оказалось что просто переменная, которая принимает значения после перекодирования, мала - размер ставился как размер в русской кодировке *2, а символ "№" в UTF-8 будет 3 байта, а не 2
Выложил в шапку версию 1.0.0
Выложил в шапку версию 1.0.0
Последний раз редактировалось RaFaeL 15 Февраль 2018, 0:26, всего редактировалось 2 раза.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8070
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 97 раз
libxlsxwriter for Clarion
Имеет место быть проблема cо всеми формулами в синтаксисе которых есть перечисление.
Выполняем потешный код и получаем нерабочий XLSX:
Проблему можно обойти, если заменить разделители:
Что в общем-то неправильно с точки зрения синтаксиса Microsoft Excel, но именно в таком виде формула хранится в XLSX ... 
Уже увидел описание на сайте LIBXLSXWRITER .... оказывается это документрованная особенность.
Выполняем потешный код и получаем нерабочий XLSX:
Код: Выделить всё
err#=xlsx.WriteFormula(1,1,'=IF(A1>A2;A1;A2)')
Код: Выделить всё
err#=xlsx.WriteFormula(1,1,'=IF(A1>A2,A1,A2)')

Уже увидел описание на сайте LIBXLSXWRITER .... оказывается это документрованная особенность.

Make Clarion Great Again ! 
libxlsxwriter for Clarion
Да, как-то непривычно. Вопрос скорее к RaFaeL - нельзя ли передавать в worksheet_write_formula формулы с ';' ( "=IF(A1>A2;A1;A2)" ), а в ней произвести подмену ';' на ',' ( "=IF(A1>A2,A1,A2)" ) ?Игорь Столяров писал(а): 15 Февраль 2018, 21:31...Что в общем-то неправильно с точки зрения синтаксиса Microsoft Excel, но именно в таком виде формула хранится в XLSX ...
C10, Win10x64
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
libxlsxwriter for Clarion
Нет. Но можно написать свой класс на основе моего и сделать там свой метод, который будет подменять и вызывать мой метод ))
Хотя я подумаю
Хотя я подумаю