Загрузка прайс-листа с картинками из 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 не будет опубликован. Обязательные поля помечены *