Программная запись в 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, УНФ, Розница.

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

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

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

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

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

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

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

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

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

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

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

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

Мы постоянно общаемся с нашими клиентами и обсуждаем как можно упростить их работу. Помощник закупок - это не просто отчет! ...

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

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