Выгрузка в несколько листов/файлов Excel в УФ

Обмен - Загрузка и выгрузка в Excel

Понадобилось выгрузить несколько отчетов в несколько листов 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); //Сохраняем в временный файл
    КонецЦикла;

КонецПроцедуры

 

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

Наименование Файл Версия Размер
Выгрузка в несколько листов/файлов Excel в УФ
.zip 65,42Kb
13.10.17
0
.zip 65,42Kb Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение