Загрузка прайс-листа с картинками из Excel и работа с буфером обмена

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

Основной проблемой, конечно, стало сохранить картинку на диск.

Поначалу решил использовать cClipBoardObject.dll (автору компоненты большое спасибо за идею!), НО! Возникла следующая проблема: картинки сохраненные с помощью вышеуказанной компоненты имеют формат данных WMF (некоторые просмоторщики распознают как EMF) и при загрузке в базу картинки отображались некорректно, да и с конвертировать их при помощи Новый Картинка().Преобразовать() тоже не получилось — система упорно выдавала ошибку.

Решил написать собственную компоненту. Функционал небольшой:

2 свойства:

  • Тип файла/FileType — тип файла в который будет сохранено изображение из буфера обмена (0 — bmp, 1 — jpg, по умолчанию 1);
  • Сжатие/Compression — степень сжатия для файлов формата JPEG (значение по умолчанию 80);

1 Метод:

  • СохранитьИзБуфера/SaveFromClipboard(ПутьКФайлу);

Пока реализовано сохранение только для типа CF_MetaFilePict (WMF). При копировании из Excel картинки в буфер используется именно этот формат.
В будущем планирую расширить функционал компоненты и извлекать уже изображения и других типов.

Пример использования для 8.2.

На 7.7 тоже все работает.

Похожие разработки:

//infostart.ru/public/19872/

//infostart.ru/public/19932/

//infostart.ru/public/16800/

 

http://shkuraev.ru

32 Comments

  1. Поручик

    Посмотри на это http://infostart.ru/public/19932/

    И на источник разработки.

    Работает со всеми распространёнными форматами.

    Reply
  2. salexdv

    (1) Ок, гляну

    Reply
  3. Magister

    Маньячество какое-то… а разве нельзя через VBA обратится к Excel и попросить его сохранить картинку на диск? С OpenOffice.org такое точно можно.

    Reply
  4. salexdv

    (3) Может и можно… Если поделитесь наработками, буду очень признателен (и не я один) 😉

    Reply
  5. Magister

    (4) У меня-то и Excel на компе нет. А вот по работе с OO.o поделиться могу (правда пока делал только формирование файла с картинками, гиперссылками). Но методы для сохранения на диск у объекта GraphicObjectShape есть.

    Reply
  6. salexdv

    (5) Это понятно, а как передать обратно в 1С путь к картинке, чтобы сделать все как в вышеозначенном примере?

    Reply
  7. Magister

    (6)

    Что-то типа:

    gProvider = Document.CreateInstance(«com.sun.star.graphic.GraphicProvider»);

    Args = New COMSafeArray(«VT_VARIANT», 2);

    Args.SetValue(0, SetValue(ServiceManager, «URL», «file:///d:/123.jpg»));

    Args.SetValue(1, SetValue(ServiceManager, «MimeType», «image/jpg»));

    gProvider.storeGraphic(GraphicObjectShape.Graphic, Args);

    Не проверял, но по идее должно работать.

    Reply
  8. salexdv

    (7) Надо будет попробовать твое маньячество 😀

    Reply
  9. CheBurator

    Автор, посмотри проект Йоксель — там вроде сделано извлечение картинок

    Reply
  10. salexdv

    (9) Хорошая вещь, только вот под свои нужды уже написал.

    Рекомендую данную обработку отнести еще к

    «ПРОГРАММИРОВАНИЕ → ОБМЕН ДАННЫМИ, ИНТЕГРАЦИЯ → 1C + Excel»

    для облегчения поиска 😉

    Reply
  11. Альберт32

    Хорошая обработка.

    Reply
  12. egoel

    Это обработка для 8ки?

    Reply
  13. salexdv

    (12) Да, эта обработка, как можно подгружать картинки из прайсов

    Reply
  14. titakovserg

    Отличная обработка. Кадровики просили перенести фотки сотрудников из Эксел; думаю несложно будет переработать эту вещь под мою задачу

    Reply
  15. salexdv

    (14) Сложностей возникнуть не должно. Лучше для работы с буфером используйте усовершенствованную версию этой компоненты

    Reply
  16. Ламия

    Возможно глупый вопрос, а будет ли грузить, если картинки в прайсе и в отдельных файликах их нет?

    Reply
  17. salexdv

    (16) Как раз для таких случаев, когда картинка только в прайсе присутствует

    Reply
  18. Ламия

    Чтож попробуем скачать и воспользоваться тогда, надеюсь все получится

    Reply
  19. Ламия

    А подскажите какого вида должен быть файл, в смысле что в какой колонке и в каком порядке.А то у меня просто создается куча пустых картинок в указанной папке,да и номенклатура никакая не грузится даже

    Reply
  20. salexdv

    (19) В файле ПримерИспользования.zip есть образец прайса. Эта обработка служит примером получения картинки из excel, но она никак не сохраняет полученные данные. Просто на ее основе можно уже реализовать что-то свое

    Reply
  21. Ламия

    Млииин,так хотелось загрузить картинки

    Reply
  22. net7wolf

    для 8.1 нужна такая

    Reply
  23. midavp

    Скачал пример и файл. Создает пустые файлы картинок!

    Reply
  24. salexdv

    (23) midavp, какая ОС используется и версия MS Office?

    Reply
  25. Yura77

    (24) office 2007, server 2008 R2 standart

    Reply
  26. ДмитрийС

    Может кто подскажет, почему тестовая обработка не работает? Вернее, что я делаю не так.

    Валится на ЗагрузитьВнешнююКомпоненту («Не найдена компонента «»1CGClipboard»», без нее работа невозможна!»).

    Регистрировал её вручную. ПодключитьВнешнююКомпоненту проходит, а вот создать объект для работы с буфером обмена нет((

    Reply
  27. salexdv

    (26) Если вы делаете так:

    ЗагрузитьВнешнююКомпоненту(«1CGClipboard.dll»);

    то dll должна лежать в каталоге исполняемых файлов программы.

    Если компонента лежит где-то в другом месте, то надо вызывать так:

    ЗагрузитьВнешнююКомпоненту(«<ПутьКDll>1CGClipboard.dll»);
    Reply
  28. ДмитрийС

    (27) Спасибо за оперативный ответ! Извиняюсь за свой долгий ответ.

    Думал у меня проблемы с рабочим компом (прав может не хватает), но я и дома проверил. Проблема осталась. Решил свой вопрос другим путем.

    Reply
  29. ClickUp

    Добрый день. Подскажите как решить проблему, Скачать Обработку и dll все зарегал все работает, но картинки не появляются и в папке создаются изображения с 0 размером. ОС Windows сервер 2008R2 и Excel 2007 (Пробовал на Windows 10 и Excel 2007 тот же результат), Помогите очень надо данный механизм.

    Reply
  30. salexdv

    Здравствуйте! Попробуйте использовать эту разработку или её бесплатный аналог.

    Reply
  31. ClickUp

    Это же редактор картинок в 1с а мне надо получить картинку из excel в 1с

    Reply
  32. salexdv

    (31) Это усовершенствованные версии. В них есть метод ПолучитьИзображение(). Если вызвать этот метод с пустым параметром, то картинка берется из буфера обмена. Потом остается вызвать только СохранитьИзображение()

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *