libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 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 КБ) 995 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
И ещё. Да простит меня автор примера, но я объявления класса заменил на
И поубирал соответственно NEW / DISPOSE. Сути не меняет, просто работает в полтора раза быстрее ... 
Код: Выделить всё
Loc:MyXLSX xlsxwriter

Make Clarion Great Again ! 
- morkovin
- Ветеран
- Сообщения: 935
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
libxlsxwriter for Clarion
Спасибо!
Заработало только после перемещения xls-процедуры в глобальную DLL, что не очень удобно. Да, шаблон не помешал бы.
Заработало только после перемещения xls-процедуры в глобальную DLL, что не очень удобно. Да, шаблон не помешал бы.
Игорь Столяров писал(а): 18 Январь 2018, 9:49В те модули, где XLSXWriter используется. Ну и подключаем в проекте *.lib (иначе вообще не соберётся)
uslugi.jpg
WBR, morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Правильно ли понял, что Вы так интересно называете добавление Include('xlsxwriter.inc') в глобальные описания модуля ?
В принципе, если хотите указывать описания класса внутри процедур, можно попробовать добавить им аттрибут STATIC.
По идее это будет тоже самое (объявление в общей области памяти). Я не пробовал.
Make Clarion Great Again ! 
- morkovin
- Ветеран
- Сообщения: 935
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
libxlsxwriter for Clarion
Да , в After Global Include.
Если вставляю в моей тест-процедуре, то прога валится при запуске этой процедуры (на инициализации класса).
Если вставляю в моей тест-процедуре, то прога валится при запуске этой процедуры (на инициализации класса).
Игорь Столяров писал(а): 18 Январь 2018, 11:25Правильно ли понял, что Вы так интересно называете добавление Include('xlsxwriter.inc') в глобальные описания модуля ?
В принципе, если хотите указывать описания класса внутри процедур, можно попробовать добавить им аттрибут STATIC.
По идее это будет тоже самое (объявление в общей области памяти). Я не пробовал.
WBR, morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Если Вы используете авторский вариант объявления класса: а выделение памяти NEW() нормально проходит ?morkovin писал(а): 18 Январь 2018, 12:25прога валится при запуске этой процедуры (на инициализации класса)
Потому, что если завал идёт на выделение памяти, то аттрибут STATIC надо попробовать в первую очередь ...
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
libxlsxwriter for Clarion
1 твип = 0,066666666666667 пиксель Y
1 твип = 0.06666666666667 пиксель (X)
Оно?
Есть ещё SetMapMode
Это я только кажусь дураком! На самом деле я полный идиот!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5239
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
libxlsxwriter for Clarion
Нет, это для определенного разрешения. Там используется функция win api . Что-то типа такого.Губин Игорь писал(а): 18 Январь 2018, 14:091 твип = 0,066666666666667 пиксель Y
1 твип = 0.06666666666667 пиксель (X)
Оно?
Есть ещё SetMapMode
http://www.hexcentral.com/articles/twips-pixels.htm
https://stackoverflow.com/questions/404 ... els-in-net
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Сделал метод для вставки произвольной графики в квадратную ячейку заданного размера.
(в примере специально используется GIF который LibXLSX не поддерживает)
Сразу честно предупреждаю:
1. Используется бесплатная библиотека FreeImage (должна быть установлена);
2. В шаровых офисных пакетах некорректно показываются отступы для картинки в ячейке;
3. Удаление рабочих файлов, оптимизация размера картинки и т.д. убраны, что бы не замыливать идею.
(в примере специально используется GIF который LibXLSX не поддерживает)
Сразу честно предупреждаю:
1. Используется бесплатная библиотека FreeImage (должна быть установлена);
2. В шаровых офисных пакетах некорректно показываются отступы для картинки в ячейке;
3. Удаление рабочих файлов, оптимизация размера картинки и т.д. убраны, что бы не замыливать идею.
- Вложения
-
- image.zip
- (13.41 КБ) 115 скачиваний
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5239
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
libxlsxwriter for Clarion
Наверно, это какое-то ограничение бмблиотеки. В xlsx для картинок задаются номера колонки и столбца начала и конца размещения, плюс смещения в твипсах по x и по y для левой/верхней границ и для нижней/правой. Если смещения не заданы, то картинка вписывается в диапазон ячеек. Какая картинка, определяется по расширению файла. Я пробовал подкладывать gif, он нормально отображался. По отступам правой/нижней границ был вопрос, если вписывать в одну ячейку. Может регулироваться смещением. Когда размещение в несколько ячеек, вроде все нормально было.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Да, действительно, существует ограничение.
В XLSXWriter картинка недолжна пересекать горизонтальную границу ячейки (иначе непредсказуемо искажается).
Тут немного другое ... Я прогнал экспорт на десятках тысяч картинок (образцы товаров), в интернете и по-жизни вообще
очень много странненькой графики, сделанной непонятно в чём: c "прямоугольными" пикселями, левыми заголовками,
отсутствием или неправильно указанным разрешением и т.д. Поэтому лучше перед экспортом всё это нормализовать.

Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5239
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
libxlsxwriter for Clarion
Нормализация не помешает, конечно. У нас менеджеры контента для веб модуля, которые подбирают фото, сразу преобразуют размер к рекомендованному, иначе в вебе фото смотрятся не очень хорошо. Если есть возможность автоматической нормализации, это плюс. Надо только учитывать, что freeimage имеет зависимость от версии винды и в определенных ситуациях приложение валится в gpf...
К слову, в вебе формат картинки определяется не по расширению файла, а по содержимому. Если переименовать, например, png в jpeg, то картинка все равно отобразится нормально. В офисных пакетах работает по расширению файла (в кларионе тоже так), что менее удобно.
К слову, в вебе формат картинки определяется не по расширению файла, а по содержимому. Если переименовать, например, png в jpeg, то картинка все равно отобразится нормально. В офисных пакетах работает по расширению файла (в кларионе тоже так), что менее удобно.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5239
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
libxlsxwriter for Clarion
Библиотека из сабжа имеет свою надстройку для работы с изображениями. В частности, масштабирование фото. Она определяет размер фото, применяет масштаб и вычисляет смещения для нижней и правой границ, которые пишет в xlsx. В самом xlsx никакого масштабирования в процентах нет, офисные пакеты делают его автоматически по заданной области размещения фото.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
libxlsxwriter for Clarion
Попробуйте просто взять одну картинку и вставить её с разным масштабом.finsoftrz писал(а): 19 Январь 2018, 8:42Библиотека из сабжа имеет свою надстройку для работы с изображениями. В частности, масштабирование фото.
В XLSX это будет одна и таже картинка, но с разным коэффициентом (высота / ширина в процентах), а исходный размер будет показан в Microsoft Excel один и тот же ... Т.е. XLSXWriter никакого масштабирования графики не делает, а просто манипулирует коэффициентами масштаба при вставке картинки. Это ведь не сложно проверить ...

Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5239
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
libxlsxwriter for Clarion
Вы не так поняли. Сама картинка не изменяется. Еще раз другими словами. xlsxWriter вычисляет смещения задней и нижней границ картинки, которые затем записываются в xlsx. Коэффициенты масштаба - это надстройка в библиотеке, в xlsx они не попадают. В xlsx размещение картинки выглядит так:
xdr:row и xdr:col определяют диапазон ячеек, в который вписывается картинка, а xdr:rowOff и xdr:colOff смещения. Офис автоматически масштабирует картинку по заданной области. Для графиков, кстати, аналогично.
Код: Выделить всё
<xdr:from>
<xdr:col>0</xdr:col>
<xdr:colOff>0</xdr:colOff>
<xdr:row>5</xdr:row>
<xdr:rowOff>0</xdr:rowOff>
</xdr:from>
<xdr:to>
<xdr:col>6</xdr:col>
<xdr:colOff>612000</xdr:colOff>
<xdr:row>19</xdr:row>
<xdr:rowOff>190080</xdr:rowOff>
</xdr:to>
C6/C12, ШВС, tps/btrieve.