libxlsxwriter for Clarion

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

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1389
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 9 раз
Поблагодарили: 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 КБ) 368 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7680
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 26 раз
Поблагодарили: 68 раз

libxlsxwriter for Clarion

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

Губин Игорь писал(а): 25 Декабрь 2022, 12:42 ячейке автовыравнивание ширины по содержимому
"автовыравнивание ширины" - это тафтология, если задуматься над смыслом. ;)
Насколько мне известно, такого (ужаса) нет в электронных таблицах.
Есть АВТОПОДБОР ВЫСОТЫ ячейки по значению содержимого. Но это иное:

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

  MyXLSX.Format.WrapText  = True
  MyXLSX.SetFormat()
  MyXLSX.WriteString( ... 
  ! Внимание ! С XLSX.Merge() работать не будет, там нужно делать иначе.
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

Игорь Столяров писал(а): 25 Декабрь 2022, 13:11 "автовыравнивание ширины" - это тафтология, если задуматься над смыслом.
Умный да?! :lol:

Автоподбор по ширине по содержимому. Аналог двойного клика по разделителю в шапке таблицы
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7680
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 26 раз
Поблагодарили: 68 раз

libxlsxwriter for Clarion

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

Губин Игорь писал(а): 25 Декабрь 2022, 13:18Умный да
Просто никогда такое не использовал ... ;)
Наверно всё-таки УСТАНОВКА ШИРИНЫ ячейки по содержанию.
Попробуйте вот так:

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

  MyXLSX.Format.Indent = True
  MyXLSX.SetFormat()
  MyXLSX.WriteString( ... 
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

Игорь Столяров писал(а): 25 Декабрь 2022, 13:24 Попробуйте вот так:
Не получается. Сшибает напрочь .Format.Align. Ну и фиг с ним
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4873
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 43 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 25 Декабрь 2022, 12:06
Губин Игорь писал(а): 25 Декабрь 2022, 12:02 нафига так извращаться с форматом для импорта
Я таки Вам больше скажу ...
Нафига вообще использовать формат электронных таблиц XLSX для обмена данными ? ;)
ю
Потому что во многих случаях это удобно. У нас обмен, в основном, xls. Xlsx это похоже, с претензией на "современный формат". Удобно потому, что и посмотреть, и распечатать, и загрузить, и поработать напрямую можно. Вот зачем нужен json, когда есть xml, это больший вопрос. Как я понимаю, чтобы упростить процесс разбора, вытащили старую библу, созданную для java. Но, скорее всего, такими темпами развития она скоро вполне может превратиться в монстра наподобии xml. Тогда снова вытащат на свет csv и так по кругу. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

Разобрался с автоподбором ширины. Пришлось делать через SetColumn. Но всплыла очень интересная фича (полностью с ней не разбирался, обошёл и хватит): если установить ширину для колонки, когда есть текст лишь в "заголовке" листа, то всё замечательно, а вот если сделать когда заполнена хоть одна ячейка в это колонке уже в "теле" листа, то её свойства (Format.Border.Format, в частности) автоматически копируются в данной колонке для всех строк до максимально возможной.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

finsoftrz писал(а): 25 Декабрь 2022, 16:14 У нас обмен, в основном, xls.
У вас этот файл автоматически испортируется в базу? Мне этого не понять...
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7680
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 26 раз
Поблагодарили: 68 раз

libxlsxwriter for Clarion

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

finsoftrz писал(а): 25 Декабрь 2022, 16:14 У нас обмен, в основном, xls
Это человеко-ориентированный обмен. Я вот сначала посмотрю, а потом пусь программа загружает и т.д.
XLSX не удобен и медленен в разборе, нет прямого доступа (хотя на githab попытки есть, но так себе ...)
Для обмена удобны текстовые теговые форматы (XML, JSON и т.д.)- впрочем они для этого и были созданы.
Губин Игорь писал(а): 25 Декабрь 2022, 16:50 Но всплыла очень интересная фича
Всё может быть - будет пример без местных хитросплетений, давайте посмотрим.
Свойства к сожалению не копируются (но очень бы хотелось конечно !).
Свойства устанавливаются и далее применяются при выводе (как настройка кисти в PaintBrash).
Если Вы их не сбрасываете XLSX.ClearFormat() - то они действуют, в т.ч. и настройка рамок.
Установки рамок для диапазона ячеек (как в Excel.OLE) тоже нет, к сожалению.
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

Игорь Столяров писал(а): 25 Декабрь 2022, 17:56 сбрасываете XLSX.ClearFormat()
Сбрасывал, раз по 10 на строку. )))

Попробую. Очень тяжело вырезать из библиотеки.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4873
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 43 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Губин Игорь писал(а): 25 Декабрь 2022, 16:51
finsoftrz писал(а): 25 Декабрь 2022, 16:14 У нас обмен, в основном, xls.
У вас этот файл автоматически испортируется в базу? Мне этого не понять...
По сути да, если говорить про обмен накладными между поставщиками и покупателями. Разумеется, надо указать, в каких колонках что находится. У меня используется для этих целей справочник планов обмена, ссылка на который указывается у контрагента. Некоторые, например, в 1с видел в нескольких конфигурациях, каждый раз перед загрузкой предлагают сопоставить. В общем, это самый распространенный обмен накладными. Аналогично, очень часто используется при переносе информации из старых программ в новые.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4873
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 43 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 25 Декабрь 2022, 17:56
finsoftrz писал(а): 25 Декабрь 2022, 16:14 У нас обмен, в основном, xls
Это человеко-ориентированный обмен. Я вот сначала посмотрю, а потом пусь программа загружает и т.д.
XLSX не удобен и медленен в разборе, нет прямого доступа (хотя на githab попытки есть, но так себе ...)
Для обмена удобны текстовые теговые форматы (XML, JSON и т.д.)- впрочем они для этого и были созданы.
Что означает нет прямого доступа? Проще всего через ole/com. Ничем не отличается от xls. Вопрос скорости возникает при большом объеме информации, это явно не про накладные или разовую загрузку справочника товаров или остатков. Речь идет не просто про обмен, а про унификацию. Кому нужно, тот загружает, кому не нужно, использует иначе. Не надо согласовывать теги и т.п., программы у всех разные. То есть это готовый инструмент для пользователей, который есть практически во всех учетных системах.
Потом, не забывайте, что xlsx это переименованный zip, внутри которого содержимое ячеек в xml файле. Никто не запрещает распаковать и извлечь информацию напрямую. Я читал про библиотеки, которые так делают. Например, в том же php.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

finsoftrz писал(а): 25 Декабрь 2022, 18:24 По сути да, если говорить про обмен накладными между поставщиками и покупателями. Разумеется, надо указать, в каких колонках что находится. У меня используется для этих целей справочник планов обмена, ссылка на который указывается у контрагента. Некоторые, например, в 1с видел в нескольких конфигурациях, каждый раз перед загрузкой предлагают сопоставить. В общем, это самый распространенный обмен накладными. Аналогично, очень часто используется при переносе информации из старых программ в новые.
А читаете как, через подгрузку Excel?
:dizzy:

10000 строк по 60 позиций в строке...
finsoftrz писал(а): 25 Декабрь 2022, 18:39 Я читал про библиотеки, которые так делают. Например, в том же php
Как вариант. Но уж больно много мусора, наверное, в файле.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4873
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 43 раза

libxlsxwriter for Clarion

Сообщение finsoftrz »

Сейчас я загружаю через vbscript, а в нем com объект создается. Раньше, когда не нужна была поддержка опен офиса, использовался ole. Не бывает накладных по 10000 строк и 60 атрибутов в строке. Справочник товаров при загрузке из какой-нибудь старой программы, например 1с (а в эксель формат позволяют сохранять информацию практически все более менее серьезные учетные системы) может быть больше 10 тыс строк, но это акция разовая, если займет пару минут, не критично.

В xlsx в архиве несколько подкаталогов и файлов. Насколько я помню, содержимое числовых ячеек хранится в одном основном xml, а строки (или только длинные строки) в другом (из основного ссылка на них). Это легко увидеть, переименуй xlsx в zip, распакуй и поищи в полученных xml по содержимому ячеек. В остальных файлах всякие стили, бинарные объекты и т.п.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1389
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 9 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Губин Игорь писал(а): 25 Декабрь 2022, 16:50 если установить ширину для колонки, когда есть текст лишь в "заголовке" листа, то всё замечательно, а вот если сделать когда заполнена хоть одна ячейка в это колонке уже в "теле" листа, то её свойства (Format.Border.Format, в частности) автоматически копируются в данной колонке для всех строк до максимально возможной.
Скорее всего, забываете чистить формат перед установкой чего-либо, например ширины колонки
Последний раз редактировалось RaFaeL 25 Декабрь 2022, 19:48, всего редактировалось 1 раз.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

libxlsxwriter for Clarion

Сообщение Губин Игорь »

finsoftrz писал(а): 25 Декабрь 2022, 19:27 Насколько я помню, содержимое числовых ячеек хранится в одном основном xml, а строки (или только длинные строки) в другом (из основного ссылка на них)
Ну да, нашёл. Но трам-тарарам, без пол литра не разобраться. :dizzy:
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить