Страница 58 из 61

libxlsxwriter for Clarion

Добавлено: 12 Август 2021, 8:41
RaFaeL
Игорь Столяров писал(а): 11 Август 2021, 22:13 Так и сделайте платную тех. поддержку - например iqXML был бесплатным, но тех. поддержка стоила $70.
Особенно для зарубежных товарищей, которые начинают смотреть сериал со 137 серии 4-го сезона.
Да что-то неинтересно этим всем заниматься. Была задача - сделать обёртку для библиотеки, я её в общем то полностью решил, на этом её можно считать закрытой. Эпизодически по мере возможности буду актуализировать функции, но именно эпизодически, раз в год или типа того, а не перманентно

libxlsxwriter for Clarion

Добавлено: 28 Октябрь 2021, 22:05
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
как вписать картинку в ячейку, имея только размер ячейки (достаточно высоты ячейки) и указав только файл картинки?

Спасибо, заранее

libxlsxwriter for Clarion

Добавлено: 28 Октябрь 2021, 22:56
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')
Хотелось бы решить, так как фото по размерам разные.

libxlsxwriter for Clarion

Добавлено: 28 Октябрь 2021, 23:27
Ал
смотрели документацию исх.проекта?
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. * "- приводить их..."

libxlsxwriter for Clarion

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

Нормализацию размера картинки мы делаем с помощью бесплатного пакета FreeImage.
Работа с любыми форматами графики (почти), много алгоритмов и уровней масштабирования графики,
возможность выполнять преобразования графики в памяти и вставлять через InsertImageBuffer().

libxlsxwriter for Clarion

Добавлено: 29 Октябрь 2021, 9:20
Ал
Здесь ведь решается немного другая задача - вставить в лист картинку фиксированного размера,
независимо от того, какого размера ячейки под ней. А мы хотим вписать картинку в ячейку.
про задачу я понимаю, но вообще-то ссылка была приведена для ознакомления и для последующих(после) возможных выводов: 1. бросить эту затею с картинками в ячейках или использованием этой библиотеки вообще; 2. если очень надо, то перед использованием этой библиотеки предварительно придется как-то "приводить" размеры всех картинок из набора в один "шаблон" - но навязывать свои выводы никому совершенно не хотелось :wink:

libxlsxwriter for Clarion

Добавлено: 29 Октябрь 2021, 9:33
Игорь Столяров
В принципе, экспорт графики в XLSX мало чем отличается от экспорта в Report.
Я бы даже сказал, что в библиотеке LibXLSXWriter есть прекрасные возможности для работы с графикой.

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

2. Если мы хотим чего большего - нужно выполнять нормализацию графики перед экспортом в отчёт.
см. предыдущие сообщения ...

libxlsxwriter for Clarion

Добавлено: 08 Ноябрь 2021, 14:16
gopstop2007
Игорь Столяров писал(а): 29 Октябрь 2021, 0:38 Здесь ведь решается немного другая задача - вставить в лист картинку фиксированного размера,
независимо от того, какого размера ячейки под ней. А мы хотим вписать картинку в ячейку.
Вроде решил проблему, благодаря светлой памяти Юрия viewtopic.php?p=31260#p31260

libxlsxwriter for Clarion

Добавлено: 08 Ноябрь 2021, 14:35
Игорь Столяров
Размер картинки можно получить и без создания контрола, например с использованием библиотеки 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 для контрастной печати на чёрно-белом принтере и т.д. :)

libxlsxwriter for Clarion

Добавлено: 08 Ноябрь 2021, 14:37
gopstop2007
Игорь Столяров писал(а): 08 Ноябрь 2021, 14:35 Из приятных бонусов: работа с PNG в C63, возможность сжимать картинки перед помещением в отчёт,
конвертация в GrayScale для контрастной печати на чёрно-белом принтере и т.д. :)
Спасибо за информацию.

libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Добавлено: 02 Апрель 2022, 16:03
Губин Игорь
Можно ли при задать при перекодировании UTF8 исходную кодовую страницу отличную от той, что установлена в Windows?

libxlsxwriter for Clarion

Добавлено: 02 Апрель 2022, 21:52
RaFaeL
Теперь можно

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

xlsx.Codepage=1251
Если не задать, то используется из настроек Windows, как и раньше

libxlsxwriter for Clarion

Добавлено: 03 Апрель 2022, 13:06
Губин Игорь
RaFaeL писал(а): 02 Апрель 2022, 21:52Теперь можно
Спасибо!!! Глюк обнаружился при тестировании Onlone-версии, но, потенциально, был возможен и в десктопной. :ty:

libxlsxwriter for Clarion

Добавлено: 29 Август 2022, 12:22
George
Добрый день!
Вроде задавал вопрос, но может что-то изменилось - может ли libxlsxwriter for Clarion работать с шаблоном (открывать, делать изменения и закрывать)?