libxlsxwriter for Clarion

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

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
Вложения
libxlsxwriter.zip
Версия 1.5 от 30.12.2021 на основе библиотеки 1.1.4
(276.26 КБ) 988 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

Артур писал(а): 03 Январь 2018, 21:51Не могу нарисовать бордюры на объединении ячеек, подскажи пожалуйста как это делается?
см. сообщения от 28.12.2017 г. или просто добавьте параметр c форматом в метод:

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

xlsxwriter.Merge     PROCEDURE(LONG first_row_,LONG first_col_,LONG last_row_,LONG last_col_)
  CODE
    return worksheet_merge_range(SELF.ActiveWorksheet,first_row_-1,first_col_-1,last_row_-1,last_col_-1,,SELF.ActiveFormat)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

Ещё необъяснимый фортель библиотеки ... Если выполнить код:

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

     err# = xlsx.WriteString(10,1,'N')
     err# = xlsx.WriteString(11,1,'!')
     err# = xlsx.WriteString(12,1,'@')
     err# = xlsx.WriteString(13,1,'№')
     err# = xlsx.WriteString(14,1,'$')
     err# = xlsx.WriteString(15,1,'%')
     err# = xlsx.WriteString(16,1,'&')
то строка 13 будет пустая. :( Подозреваю, что проблема где-то с конвертации в UTF, потому что
при вводе напрямую в Microsoft Excel или при экспорте через OLE символ '№' нормально записывается в ячейку.
Не смертельно ... но непонятно ! :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 02 Январь 2018, 10:45Кстати, Libre Office Calc работает шустрее, чем Open Office Calc.
Да, но есть проблемы-с ... ;)
При открытии в Libre Calc XLSX файла созданного через XLSXWriter не отрабатывается перенос текста (WrapText). :(
- Если открывать XLSX файл в Apache Calc с конвертацией - проблемы нет;
- Если перезаписать созданный в XLSXWriter XLSX файл через Microsoft Excel - проблемы нет и в Libre Calc;
- Если создать XLSX файл, например через библиотеку EasyOpenOffice напрямую в Libre Calc - проблемы нет.

А в XLSX файлах созданных через Ваш класс отрабатывается перенос строк (WrapText) при открытии в Libre Calc ?
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Посмотрел, тоже не срабатывает. Сейчас пока занят, чуть позже уточню. Что-то в стиле надо подкорректировать.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 04 Январь 2018, 0:45Ещё необъяснимый фортель библиотеки ... Если выполнить код:

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

     err# = xlsx.WriteString(10,1,'N')
     err# = xlsx.WriteString(11,1,'!')
     err# = xlsx.WriteString(12,1,'@')
     err# = xlsx.WriteString(13,1,'№')
     err# = xlsx.WriteString(14,1,'$')
     err# = xlsx.WriteString(15,1,'%')
     err# = xlsx.WriteString(16,1,'&')
то строка 13 будет пустая. :( Подозреваю, что проблема где-то с конвертации в UTF, потому что
при вводе напрямую в Microsoft Excel или при экспорте через OLE символ '№' нормально записывается в ячейку.
Не смертельно ... но непонятно ! :)
У меня символ № корректно выводится. А вот для вывода & надо заменить на &. Не знаю, как лучше, либо в самом классе автоматически такие вещи разруливать, либо явно. Ситуации со спецсимволами могут быть разные.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 04 Январь 2018, 10:38А вот для вывода & надо заменить на &
Тут-то хоть более или менее понятно: Вы ведь напрямую пишите в XML файл - это спецификация XML.
А вот каким местом символ "№" вдруг стал СПЕЦСИМВОЛОМ - непонятно ! :)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

finsoftrz писал(а): 04 Январь 2018, 10:36Посмотрел, тоже не срабатывает. Сейчас пока занят, чуть позже уточню. Что-то в стиле надо подкорректировать.
Похоже, libre не умеет автоматически увеличивать высоту строки при WrapText. Посмотрел файл, сохраненный из libre с автопереносом. В xml стиль прописывается аналогично, а вот высота строки явно с нужным (увеличенным) размером.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 04 Январь 2018, 11:04 В xml стиль прописывается аналогично, а вот высота строки явно с нужным (увеличенным) размером.
Не уверен, что дело в том, что Libre Calc жестко выставляет высоту строки.
Если пересохранить XLSX файл через Microsoft Excel - то WrapText в Libre Calc отрабатывается штатно.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

А скиньте файлик после сохранения в excel. Или сами гляньте в нем xl\worksheets\sheet1.xml для нужного row, что стоит в атрибуте ht. После сохранения из libre у меня в других строках значение 15, а в строке, где применен wrap, значение больше. LibxlsxWriter атрибут ht не применяет, если не задать явно высоту строки.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 04 Январь 2018, 11:33что стоит в атрибуте ht.
Файлы сбросил в личку. Да, Microsoft Excel записывает в аттрибут HT высоту строки ...
Но ведь в Microsoft Excel и оригинальный (записанный в XLSXWriter) сразу открывается с раздвижкой строк.
Значит параметр WrapText управляется каким-то другим тегом, который Libre Calc игнорирует.
Здесь нужно знать спецификацию XLSX формата, потому что методом "исcледования выхлопа" можно разбираться бесконечно долго. :(
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Он управляется атрибутом wraptext у стиля. Но применение этого атрибута не приводит к автоматическому увеличению высоты в libre. А в excel и open office приводит. Возможно, у libre используется какой-то дополнительный атрибут, текст переносится, не измеяется высота строки.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Погуглил немного. Как я понял, это известный баг в libre. Рекомендуют устанавливать высоту строки явно. Я похожее делаю в dexcel, так как там тоже не поддерживается wraptext. То есть в бланке вписываю в ячейку специальную формулу для класса формирования xls. Но это явный костыль.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Руденко, помнится, рекомендовал для dexcel еще другой костыль - после формирования xls файла подключаться через ole и устанавливать wraptext для нужной колонки.
В общем, с libre засада, судя по всему.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5234
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 64 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Да, еще заметил, что у libre есть какая-то несовместимость с программным интерфейсом. После установки перестали выводится графики, которые нормально отрабатывались в open office. Потом снес, установил на всякий случай последнее обновление open office. Все снова заработало. Заново установил libre, как ни странно, вывод остался корректный.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 04 Январь 2018, 14:15В общем, с libre засада, судя по всему.
Да, ну не дружат между собой понятия "на шару" и "хорошо работает" ... :)
Make Clarion Great Again ! 😎
Ответить