Самый простой и кросплатформенный способ сформировать файл Excel - это сформировать табличный документ и записать его в формате Excel
ТД = Новый ТабличныйДокумент();
...
ТД.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)
Если надо сформировать книгу из нескольких страниц, то лучше использовать объект ПакетОтображаемыхДокументов, поместить в него табличные документы и так же записать в формате Excel.
Чтобы добавить табличные документы в ПакетОтображаемыхДокументов их надо поместить во временное хранилище и заполнить состав пакета.
Элемент пакета состоит из реквизитов: Данные (адрес во временном хранилище) и Наименование (имя страницы в будущем файле).
Общий принцип работы такой:
1. Вызываем из клиента метод для формирования на сервере массива данных для будущей таблицы.
2. На сервере формируем табличные документы, записываем их во временное хранилище и заполняем массив структур (Имя страницы, АдресВХранилище)
3. На клиенте создаем ПакетОтображаемыхДокументов, заполняем по массиву его состав и записываем файл.
Пример:
&НаКлиенте
Процедура СформироватьТаблицуExcel(Команда)
МассивОписанийФайлов = СформироватьМассивФайлов();
СформироватьИтоговыйФайл(МассивОписанийФайлов);
КонецПроцедуры
&НаСервере
Функция СформироватьМассивФайлов()
Макет = ПолучитьМакет("ИмяМакета");
МассивФайлов = Новый Массив();
ТаблицаОтчета = Новый ТабличныйДокумент();
ОбластьШапка = Макет.ПолучитьОбласть("шапка");
ТаблицаОтчета.Вывести(ОбластьШапка);
Адрес = ПоместитьВоВременноеХранилище(ТаблицаОтчета);
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяСтраницы, Адрес));
...
Возврат МассивФайлов;
КонецФункции
&НаКлиенте
Процедура СформироватьИтоговыйФайл(МассивДанных)
ПоказатьОповещениеПользователя("Идет обработка...");
ИмяФайла = Отчет.Папка + "Итоговая таблица.xlsx";
Пакет = Новый ПакетОтображаемыхДокументов;
Для Каждого ДанныеЛиста Из МассивДанных Цикл
АдресВХранилище = ДанныеЛиста["Хранение"];
ЭлементПакета = Пакет.Состав.Добавить();
ЭлементПакета.Наименование = ДанныеЛиста["Имя"];
ЭлементПакета.Данные = АдресВХранилище;
КонецЦикла;
Попытка
Пакет.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX);
ПоказатьПредупреждение(, "Файл выгружен в " + ИмяФайла);
Исключение
ПоказатьПредупреждение(,"Ошибка выгрузки в " + ИмяФайла);
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
|