Понадобилось выгрузить несколько отчетов в несколько листов Excel. Написал универсальную функцию, которая позволяет это сделать. Также есть вариант, который сохраняет отчеты в несколько файлов Excel.
Обработка, демонстрирующая функционал, выдает отчет по остаткам и продажам в УТ11 и сохраняет отчеты по отдельным видам номенклатуры в отдельные листы/файлы.
Обработка имеет вид:
После выгрузки выдается предупреждение:
Если не установлена галочка «Выгружать в Excel», то данные будут выгружаться в отчет:
Если выбран переключатель «В отдельные файлы», то выгрузка произойдет в отдельные файлы:
Если выбран переключатель «В отдельные листы», то выгрузка произойдет в отдельные листы одного файла:
Код по выгрузке в файлы имеет вид (СписокОтчетов – массив табличных документов):
&НаКлиенте
Процедура СохранитьОтчетыВФайлExcelСЛистами(СписокОтчетов, ИмяФайла) Экспорт
Эксель
= New COMObject("Excel.Application");
Первый = истина;
//Для защиты от
дублей имен
СооИмена = Новый СписокЗначений();
//Перебираем
отчеты в MXL
Для Каждого Элемент ИЗ СписокОтчетов Цикл
ТабДок = Элемент.Значение;
//ТабДок.Показать();
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XLS");
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLS); //Сохраняем в временный файл
ТекКнига = Эксель.Workbooks.Open(ИмяВременногоФайла);
Если Первый Тогда
Книга = ТекКнига; //Первый файл и
есть результат, чтобы сохранялись цвета
Иначе
ТекКнига.Sheets(1).Copy(, Книга.Sheets(Книга.Sheets.Count)); //Copy(Before, After)
КонецЕсли;
//Защита от одинаковых ярлыков
ТекБазаНаименование = Элемент.Представление;
ТекНаименование = ТекБазаНаименование; СчНаименований = 2;
Пока СооИмена.НайтиПоЗначению(ТекНаименование) <> Неопределено Цикл
ТекНаименование = ТекБазаНаименование
+ "(" + СчНаименований + ")";
СчНаименований = СчНаименований + 1;
КонецЦикла;
СооИмена.Добавить(ТекНаименование);
Книга.Sheets(Книга.Sheets.Count).Name = ТекНаименование; //Переименовываем
Если Первый Тогда
//Делаем доступными ярлыки листов
Эксель.ActiveWindow.DisplayWorkbookTabs
= 1;
Эксель.ActiveWindow.TabRatio = 0.6;
Первый = ложь;
Иначе
ТекКнига.Close();
КонецЕсли;
КонецЦикла;
//Удаляем, чтобы
не переспрашивал
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
Книга.SaveAs(ИмяФайла, -4143); //xlWorkbookNormal -4143 Workbook normal
Книга.Close();
КонецПроцедуры
&НаКлиенте
Процедура СохранитьОтчетыВФайлыExcel(СписокОтчетов, ИмяФайла) Экспорт
Ф = Новый Файл(ИмяФайла);
//Перебираем
отчеты в MXL
Для Каждого КЗ ИЗ СписокОтчетов Цикл
ИмяТекущегоФайла = Ф.Путь + "\" + Ф.ИмяБезРасширения + "_" + КЗ.Представление + ".XLS";
КЗ.Значение.Записать(ИмяТекущегоФайла, ТипФайлаТабличногоДокумента.XLS); //Сохраняем в временный файл
КонецЦикла;
КонецПроцедуры