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

Опубликовал Merab Nick (merabn) в раздел Обработки - Обработка справочников

Загрузка картинок (рисунков) номенклатуры из файла Excel с прайс-листом без использования внешних библиотек и компонентов.

Идея взята из комментария к теме:

//infostart.ru/public/69412/

Идея состоит в копировании рисунка в буфер обмена методом 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 - Количество

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

Скачать файлы

Наименование Файл Версия Размер
ЗагрузкаИзЭксельСКартинками
.epf 10,41Kb
25.03.16
20
.epf 1.0 10,41Kb 20 Скачать

См. также

Комментарии
1. Виктор Фролов (luckardo) 9 12.04.17 18:01 Сейчас в теме
выдает ошибку
Прикрепленные файлы: