libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 11 Август 2021, 22:13 Так и сделайте платную тех. поддержку - например iqXML был бесплатным, но тех. поддержка стоила $70.
Особенно для зарубежных товарищей, которые начинают смотреть сериал со 137 серии 4-го сезона.
Да что-то неинтересно этим всем заниматься. Была задача - сделать обёртку для библиотеки, я её в общем то полностью решил, на этом её можно считать закрытой. Эпизодически по мере возможности буду актуализировать функции, но именно эпизодически, раз в год или типа того, а не перманентно
gopstop2007
✯ Ветеран ✯
Сообщения: 1630
Зарегистрирован: 25 Март 2009, 21:55

libxlsxwriter for Clarion

Сообщение gopstop2007 »

Решил использовать в проекте libxlsxwriter.
Вопрос по InsertImage из примера:

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

            err#=xlsx.InsertImage(12,1,'mylogo.png',10,15,0.5,0.5,XLSX:OBJECT_DONT_MOVE_DONT_SIZE,'')
!             err#=xlsx.InsertImage(12,1,'mylogo.png',10,15,1.5,1.5,,'Картинка',0,'https://www.clarionlife.net','Нажми!')
!            err#=xlsx.InsertImage(12,1,'лого.png',10,15,1.5,1.5)
            if err#
              stop(xlsx.StrError(err#))
            end
            err#=xlsx.InsertImageBuffer(12,3,ImageStr,len(?Image{prop:imagebits}))
            if err#
              stop(xlsx.StrError(err#))
            end
как вписать картинку в ячейку, имея только размер ячейки (достаточно высоты ячейки) и указав только файл картинки?

Спасибо, заранее
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1630
Зарегистрирован: 25 Март 2009, 21:55

libxlsxwriter for Clarion

Сообщение gopstop2007 »

Игорь Столяров писал(а): 28 Октябрь 2021, 22:36 В общем случае, эта задача решается иначе.
В частном случае, если у Вас квадратная картинка и высота ячейки больше или равна ширине -
можно рассчитать коэффициент масштабирования и одним InsertImage() вписать картинку в ячейку.
Спасибо за ответ.
Это сделал до того как написал сюда :), рассчитал Ratio по формуле

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

l_ratio = ВысотаЯчейки / высотаФото * 1.3
Проблема в том, что фото могут быть разные по размерам и нужно вычислять высотаФото
Игорь Столяров писал(а): 28 Октябрь 2021, 22:36 Есть 2 грустных нюанса:
-------------------------------
1. Ячейка и картинка измеряются совсем в разных единицах измерения.
Точнее измеряются совсем по разному. Если интересно - полистайте тему, мы это обсуждали.
Отдельное спасибо finsoftrz, но всё равно пришлось много читать, прежде чем до меня дошло. ;)

2. Вставлять картинку в ячейку с указанием коэффициента InsertImage() - это демонстративная возможность,
для работы не подходит. Во первых, Excel отвратительно масштабирует графику по качеству. Совсем.
Во вторых - он это делает в момент открытия XLSX. :(
Т.е. если у Вас есть полноцветные фотки 1000 товара и Вы хотите сделать прайс-лист с маленькими
картинками образцов - то получите гигабайтный XLSX, который будет минуту открываться (и не везде).

В общем случае, эта задача решается иначе.
1 пункт, уже сам решил, написано выше. 2-й, решал с помощью abxl взятого с нашего сайта (Александр Полонский) и проблем не было, при высоте клетки 40 на 1000 позиций не более 100 мБ

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

                        xlo.SetProperty('Selection.RowHeight',l_VisotaKletki)
                        rec_SetCommand = 'Application.ActiveSheet.Pictures.Insert("'& l_pathProgram & '\tmp.jpg").Select'
                        xlo.SendCommand(CLIP(rec_SetCommand))
                        IF loc_FotoProportion = 0
                            xlo.SetProperty('Application.Selection.ShapeRange.LockAspectRatio',0)
                        ELSE
                            xlo.SetProperty('Application.Selection.ShapeRange.LockAspectRatio',1)
                        END
                        xlo.SetProperty('Application.Selection.ShapeRange.Height',l_VisotaKletki)    ! Height
                        !xlo.SetProperty('Application.Selection.ShapeRange.Width',l_VisotaKletki)   ! Width
                        xlo.SendCommand('Selection.Cut')
                        xlo.SendCommand('ActiveSheet.Pictures.Paste.Select')
Хотелось бы решить, так как фото по размерам разные.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ал
Ветеран
Сообщения: 918
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

libxlsxwriter for Clarion

Сообщение Ал »

смотрели документацию исх.проекта?
Spoiler
Working with Object Positioning
Libxlsxwriter positions worksheet objects such as images and charts in worksheets by calculating precise co-ordinates based on the object size, it's DPI (for images) and any scaling that the user specifies. It also takes into account the heights and widths of the rows and columns that the object crosses. In this way objects maintain their original sizes even if the rows or columns underneath change size or are hidden.
...
Reporting issues with image insertion
A lot of work has gone into ensuring that Libxlsxwriter inserts images into worksheets in exactly the same way that Excel does, even though the required calculations and units are arcane. There are over 80 test cases that check image insertion against files created in Excel to ensure that Libxlsxwriter's handling of images is correct.
As such, before reporting any issues with image handling in Libxlsxwriter please check how the same image is handled in Excel (not OpenOffice, LibreOffice or other third party applications). If you do report an issue please use the Libxlsxwriter Issue tracker is on GitHub that demonstrates the issue.
https://libxlsxwriter.github.io/working ... oning.html
Хотелось бы решить, так как фото по размерам разные.
- приходить их/или копии для таблицы/ предварительно к одному стандарту...
p.s. * "- приводить их..."
Последний раз редактировалось Ал 29 Октябрь 2021, 9:02, всего редактировалось 1 раз.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5743
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

libxlsxwriter for Clarion

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

Ал писал(а): 28 Октябрь 2021, 23:27 смотрели документацию исх.проекта?
Здесь ведь решается немного другая задача - вставить в лист картинку фиксированного размера,
независимо от того, какого размера ячейки под ней. А мы хотим вписать картинку в ячейку.
gopstop2007 писал(а): 28 Октябрь 2021, 22:56 Хотелось бы решить, так как фото по размерам разные.
Мы пошли по пути нормализации. Т.е. предположим, что мы знаем размер ячейки (удобно когда квадрат).
Выполняем масштабирование и приводим размер большей стороны картинки к размеру ячейки.
Рассчитываем смещение картинки по вертикали / горизонтали и вставляем с учётом отступа от края ячейки.
В этом случае, коэффициент масштабирования нам не нужен.

Нормализацию размера картинки мы делаем с помощью бесплатного пакета FreeImage.
Работа с любыми форматами графики (почти), много алгоритмов и уровней масштабирования графики,
возможность выполнять преобразования графики в памяти и вставлять через InsertImageBuffer().
«V» значит Вендетта !
Ал
Ветеран
Сообщения: 918
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

libxlsxwriter for Clarion

Сообщение Ал »

Здесь ведь решается немного другая задача - вставить в лист картинку фиксированного размера,
независимо от того, какого размера ячейки под ней. А мы хотим вписать картинку в ячейку.
про задачу я понимаю, но вообще-то ссылка была приведена для ознакомления и для последующих(после) возможных выводов: 1. бросить эту затею с картинками в ячейках или использованием этой библиотеки вообще; 2. если очень надо, то перед использованием этой библиотеки предварительно придется как-то "приводить" размеры всех картинок из набора в один "шаблон" - но навязывать свои выводы никому совершенно не хотелось :wink:
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5743
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

libxlsxwriter for Clarion

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

В принципе, экспорт графики в XLSX мало чем отличается от экспорта в Report.
Я бы даже сказал, что в библиотеке LibXLSXWriter есть прекрасные возможности для работы с графикой.

1. Если Вас устраивает масштабирование картинки по размеру ячейки штатным методом - то и нет проблем.
Но всё равно придётся решать вопросы с экспортом картинок разной раскладки (книга / альбом),
их центровки в ячейке и отступом от края ячейки (иначе совсем уж убого будет выглядеть).

2. Если мы хотим чего большего - нужно выполнять нормализацию графики перед экспортом в отчёт.
см. предыдущие сообщения ...
«V» значит Вендетта !
gopstop2007
✯ Ветеран ✯
Сообщения: 1630
Зарегистрирован: 25 Март 2009, 21:55

libxlsxwriter for Clarion

Сообщение gopstop2007 »

Игорь Столяров писал(а): 29 Октябрь 2021, 0:38 Здесь ведь решается немного другая задача - вставить в лист картинку фиксированного размера,
независимо от того, какого размера ячейки под ней. А мы хотим вписать картинку в ячейку.
Вроде решил проблему, благодаря светлой памяти Юрия viewtopic.php?p=31260#p31260
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5743
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

libxlsxwriter for Clarion

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

Размер картинки можно получить и без создания контрола, например с использованием библиотеки FreeImage:

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

theImage     FreeImageClass
Loc:MaxSize  Long

  If theImage.iImage.Load(Loc:ImageFileName)
     Loc:MaxSize = Choose(theImage.ImageSize.Width >= theImage.ImageSize.Height,theImage.ImageSize.Width,theImage.ImageSize.Height)
     ...
  end 
Из приятных бонусов: работа с PNG в C63, возможность сжимать картинки перед помещением в отчёт,
конвертация в GrayScale для контрастной печати на чёрно-белом принтере и т.д. :)
Последний раз редактировалось Игорь Столяров 08 Ноябрь 2021, 14:37, всего редактировалось 1 раз.
«V» значит Вендетта !
gopstop2007
✯ Ветеран ✯
Сообщения: 1630
Зарегистрирован: 25 Март 2009, 21:55

libxlsxwriter for Clarion

Сообщение gopstop2007 »

Игорь Столяров писал(а): 08 Ноябрь 2021, 14:35 Из приятных бонусов: работа с PNG в C63, возможность сжимать картинки перед помещением в отчёт,
конвертация в GrayScale для контрастной печати на чёрно-белом принтере и т.д. :)
Спасибо за информацию.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1237
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

С наступающим!
Выложил в шапку свежую версию на основе актуальной библиотеки. Добавлено:
- значения автофильтра
- вставка кнопки
- установка размеров колонок и строк в пикселях
- фоновое изображение
- поддержка динамических формул
- ячейка верхнего левого угла
- и еще какие-то мелочи
Ответить