Программная запись в Excel данных и изображений

Из этой записи Вы узнаете 2 самых распространенных способа выгрузки данных в Excel. Мы рассмотрим эффективность и ограничения каждого метода, разберем нюансы записи, затронем некоторые моменты клиент-серверного взаимодействия.

Для анализа способов записи мы создали обработку, которая записывает файл Excel в двух вариантах. Форма обработки показана ниже:

Обработка выполняет запись 3 строк, в каждой строке 5 значений и одна картинка. Код обработки может выполняться как на клиенте, так и на сервере.

Вы можете скачать обработку и ознакомиться с ее работой по ссылке:

Выгрузка через Табличный документ

Это один из самых простых способов записи в xlsx и xls. В 1С в этом варианте Вы будете работать с объектом ТабличныйДокумент. Ниже показан пример записи в табличный документ, который Вы также можете найти в прилагаемой выше обработке:

&НаКлиенте
Процедура ВыполнитьЗаписьЧерезТабличныйДокумент()
	ТабДок = Новый ТабличныйДокумент;
	Для СтрокаНомер = 1 По 3 Цикл
		//Записываем значения строки
		Для КолонкаНомер = 1 По 5 Цикл
			Область = ТабДок.Область(СтрокаНомер, КолонкаНомер);
			Область.Текст = СтрокаНомер * КолонкаНомер;
		КонецЦикла;
		//Записываем изображение
		Область = ТабДок.Область(СтрокаНомер, 6);
		Область.Картинка = Элементы["Изображение" + СтрокаНомер].Картинка;
	КонецЦикла;
	ТипФайла = ТипФайлаТабличногоДокумента.XLSX; //Если запись в формате xls - тип файла ТипФайлаТабличногоДокумента.XLS97
	ТабДок.Записать(Каталог + "\Тест.xlsx", ТипФайла);
КонецПроцедуры

Плюсы данного метода записи:

  • Не нужно устанавливать Excel на клиенте/сервере.
  • Не нужно реализовывать масштабирование изображений — Вы устанавливаете только ширину/высоту ячейки.
  • Высокая скорость записи т.к. не используется прослойка в виде COMОбъекта.

Минусы:

  • Нет возможности устанавливать формулы для ячеек.
  • Неконтролируемая конвертация табличного документа в документ Excel.  Как пример — могут смещаться изображения.

Замер производительности показывает общее время записи 0,28 сек.

Выгрузка через Excel

В этом варианте запись выполняется с помощью COMОбъекта Excel — устанавливаем соединение с Excel, создаем книгу и размещаем данные на ее листах. Обязательно закрываем книгу и соединение!

&НаКлиенте
Процедура ВыполнитьЗаписьЧерезExcel()
	Эксель = Новый COMОбъект("Excel.Application");
	Эксель.DisplayAlerts = 0;
	Эксель.ScreenUpdating = 0;
	Эксель.EnableEvents = 0;
	Книга = Эксель.WorkBooks.Add();
	Лист = Книга.WorkSheets(1);
	Для СтрокаНомер = 1 По 3 Цикл
		//Записываем значения строки
		Для КолонкаНомер = 1 По 5 Цикл
			Лист.Cells(СтрокаНомер, КолонкаНомер).Value = СтрокаНомер * КолонкаНомер;
		КонецЦикла;
		//Записываем изображение
		СтрокаКартинка = Элементы["Изображение" + СтрокаНомер].Картинка;
		ВременныйФайл = ПолучитьИмяВременногоФайла("" + СтрокаКартинка.Формат());
		СтрокаКартинка.Записать(ВременныйФайл);
		ЛистИзображение = Лист.Shapes.AddPicture(ВременныйФайл, Ложь, Истина, Лист.Cells(СтрокаНомер, 6).Left + 1, Лист.Cells(СтрокаНомер, 6).Top + 1, -1, -1);
		ЛистИзображение.Placement = 1;
		ЛистИзображение.LockAspectRatio = 0;
		//Масштабирование изображения
		ЛистИзображение.Width = 47;
		ЛистИзображение.Height = 29;
		Лист.Rows(СтрокаНомер).RowHeight = 33;
		ЛистИзображение.Height = 29;
		УдалитьФайлы(ВременныйФайл);
	КонецЦикла;
	ТипФайла = 51; //Если запись в формате xls - тип файла -4143
	Книга.SaveAs(Каталог + "\Тест.xlsx", ТипФайла);
	Попытка
		Книга.Close(Ложь);
		Эксель.DisplayAlerts = 1;
		Эксель.Quit();
	Исключение
		Информация = ИнформацияОбОшибке();
		Сообщить(Информация.Описание);
	КонецПопытки;
КонецПроцедуры

Плюсы данного метода записи:

  • Полный контроль над процессом записи.
  • Доступ практически ко всем возможностям Excel.

Минусы:

  • Нужно устанавливать Excel на клиенте/сервере.
  • Нужно реализовывать масштабирование изображений. Алгоритм записи должен позиционировать изображение в ячейке устанавливая ширину и высоту. Также нужно настраивать высоту строки.
  • Низкая скорость записи.

Замер производительности показывает общее время записи 0,86 сек. Это в 3 раза медленнее чем запись через Табличный документ. По своему опыту можем отметить — медленнее может быть в 10 и более раз!

Итоги

При выборе варианта выгрузки лучше смотреть на поставленную задачу. Оптимально использовать запись через Табличный документ — многие моменты записи будут упрощены. Можно объединять 2 варианта записи — основу записывать через Табличный документ, а формулы добавлять с использованием Excel. Такая запись будет производительнее чем полная запись через Excel.

В свою очередь мы в своем Конструкторе прайс-листов отказались от обоих вариантов и разрабатывали свой. Нужна была максимальная производительность, полное управление процессом записи, сжатие изображений. Ознакомиться с его возможностями Вы можете по ссылке — Конструктор прайс-листов (прайс-заказов) для УТ11, КА2, ERP2, УНФ, Розница.

Наши разработки:
Учет сертификатов номенклатуры в УНФ (печать реестра сертификатов)

Учет сертификатов номенклатуры в УНФ (печать реестра сертификатов)

Расширение конфигурации добавит возможность вести учет сертификатов номенклатуры в конфигурации "Управление нашей фирмой, редакция 1.6". Вы сможете организовать учет сертификатов ...
Обмен 1С и OZON (УТ11, ERP2, КА2, БП3, УНФ, Розница)

Обмен 1С и OZON (УТ11, ERP2, КА2, БП3, УНФ, Розница)

Расширение конфигурации позволяет выполнять автоматический обмен между 1С и OZON и совместимо с актуальными конфигурациями Управление торговлей 11, ERP Управление ...
Расширенная форма заказа клиента для УТ11, КА2, ERP2

Расширенная форма заказа клиента для УТ11, КА2, ERP2

Расширение конфигурации позволяет выводить остатки по всем необходимым складам, отображать цены номенклатуры и дополнительные колонки номенклатуры прямо в списке товаров ...
Управление запасами: Товары поставщиков (УТ11, КА2, ERP2)

Управление запасами: Товары поставщиков (УТ11, КА2, ERP2)

Функционал расширения конфигурации позволяет в удобной форме автоматически загружать прайс-листы поставщиков в 1С, анализировать загруженные данные, автоматически устанавливать цены с ...
Изменение записей регистра сведений (универсальная обработка)

Изменение записей регистра сведений (универсальная обработка)

Обработка дает возможность массово или точечно изменять записи регистра сведений. Поддерживается изменение записей в независимых регистрах и регистрах с подчинением ...
Остатки товаров в РМК (УТ11, КА2, ERP2)

Остатки товаров в РМК (УТ11, КА2, ERP2)

Расширение конфигурации добавит возможность просматривать остатки по складу для выбранных в РМК (рабочее место кассира) товаров. При этом Вы сможете ...

Добавить комментарий

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