Идея взята из комментария к теме:
Идея состоит в копировании рисунка в буфер обмена методом com объекта Excel. Из буфера обмена картинка копируется в созданный объект Excel диаграмма, а из нее сохраняется в графический файл. Из графического файла картинку можно добавить к номенклатуре уже штатными средствами.
Для каждого рисунка в документе вычисляется строка документа, в котором он находится, и таким образом сопоставляется с номенклатурой.
// В параметрах передаются объекты страницы документа Excel и картинки.
// Функция возвращает номер строки документа, в котором находится рисунок
Функция ПолучитьНомерСтрокиОбъекта(СтраницаДокумента,Картинка)
НомерСтроки = 0;
ТекущаяПозиция = 0;
ПозицияКартинки = Картинка.Top + 3; // на случай, если картинка выходит за границы строки документа добавляем 3 пикселя
Пока ТекущаяПозиция < ПозицияКартинки Цикл
НомерСтроки = НомерСтроки + 1;
ВысотаСтроки = СтраницаДокумента.Rows(НомерСтроки).Height;
ТекущаяПозиция = ТекущаяПозиция + ВысотаСтроки;
КонецЦикла;
Возврат НомерСтроки;
КонецФункции
.............
// Как загрузить номенклатуру из строк документа не привожу.
// Здесь только получение картинок и добавление к номенклатуре, раннее импортированной
// и указанной ссылками в таблице обработки, в которой номера строк соответствуют строкам документа
Excel = Новый COMОбъект("Excel.Application");
WB = Excel.Workbooks.Open(Объект.ФайлЗагрузки);
WS = WB.Worksheets(1);
Если ЗагружатьКартинки Тогда
WS1 = WB.Worksheets(2); // Создаем диаграмму Excel
ДиаграммаXLS = WS1.ChartObjects().Add(0, 0, 100, 100);
Для Н = 1 По WS.Pictures.Count() Цикл
Картинка = WS.Pictures.Item(Н);
НомерСтроки = ПолучитьНомерСтрокиОбъекта(WS, Картинка);
Картинка.Copy(); // Копируем картинку в буфер обмена
Ширина = Картинка.Width;
Высота = Картинка.Height;
ДиаграммаXLS.Width = Ширина * 1.01; // Устанавливаем размеры
ДиаграммаXLS.Height = Высота * 1.01;
ДиаграммаXLS.Chart.Paste();
ДиаграммаXLS.Chart.Export("c:\TEMP\picture.jpg"); // Сохраняем картинку во временный файл
Если НомерСтроки > 0 И НомерСтроки <= ТаблицаЦенИОстатков.Количество() Тогда
ДвоичныеДанныеКартинки = Новый ДвоичныеДанные("c:\TEMP\picture.jpg");
ДанныеКартинки = Новый Картинка(ДвоичныеДанныеКартинки);
АдресДвоичныхДанныхКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки);
Номенклатура = ТаблицаЦенИОстатков[НомерСтроки - 1].Номенклатура;
ЗаписатьКартинкуНоменклатуры(АдресДвоичныхДанныхКартинки, Номенклатура, ДанныеКартинки.Формат());
КонецЕсли;
КонецЦикла;
КонецЕсли;
Приложенная обработка не претендует на универсальность, в ней реализован импорт номенклатуры из прайса с жестко заданной структурой. Импортируется в конфигурацию Управление торговлей 11.2, используется определенный вид номенклатуры ("ТоварСКартинками", опционально с дополнительными свойствами "Состав" и "Произведено"). Графический файл сохраняется в каталоге C:\TEMP. В первой строке документа на первом листе Excel должны быть заголовки столбцов (не используется). Стобцы:
- 1 - не используется
- 2 - Наименование (обязательно)
- 3 - не используется
- 4 - Артикул
- 5 - Производитель
- 6 - Картинка (положение в строке не имеет значения)
- 7 - Состав (опционально)
- 8 - Описание
- 9 - Страна (опционально)
- 10 - Цена
- 11 - Количество
Обработку можно использовать в качестве шаблона для реализации импорта номенклатуры под собственные нужды.