Каталог решений - Удаление из файла эксель ненужных страниц средствами 1С без COM и через COM

Удаление из файла эксель ненужных страниц средствами 1С без COM и через COM

Удаление из файла эксель ненужных страниц средствами 1С без COM и через COM

В наличии

Как средствами 1С из файла эксель удалить ненужные листы без COM и с ним.

Я разрабатывал на платформе 1С:Предприятие 8.3 (8.3.14.1694)

Категория:

Описание

1. Создать справочник, нам он понадобится, чтобы через предприятие управлять, какие страницы нам нужны, "СписокЛистовВФайлеЭксель" с реквизитами: 

"Используется" — булево

"Сохранить" — булево

"Удалить" — Удалить


Модуль менеджера справочника

&НаСервере
Процедура ДобавлениеЗаписи(Вх_Наименование) Экспорт 
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	СписокЛистовВФайлеЭксель.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник._СписокЛистовВФайлеЭксель КАК СписокЛистовВФайлеЭксель
	|ГДЕ
	|	СписокЛистовВФайлеЭксель.Наименование ПОДОБНО &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", Вх_Наименование);
	
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() Тогда
		
		НовЭлемент = Справочники.СписокЛистовВФайлеЭксель.СоздатьЭлемент();
		НовЭлемент.УстановитьНовыйКод();
		НовЭлемент.Наименование = Вх_Наименование;
		
		Попытка
			НовЭлемент.Записать();
		Исключение
			ЗаписьЖурналаРегистрации("СписокЛистовВФайлеЭксельДляУдаления", УровеньЖурналаРегистрации.Ошибка,,, "Не удалось записать: " + Строка(ОписаниеОшибки())); 
		КонецПопытки;
		
	КонецЕсли; 
	
КонецПроцедуры // ДобавлениеЗаписи()



 

2. Любая обработка

&НаСервере
Функция УдалитьЛистыЭксель(АдресФайлаНаСервере, ИмяФайла, ДокРеализацияСсылка)
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(ТипВыбранногоФайла); //"xlsx"
    ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайлаНаСервере);
    ДанныеФайла.Записать(ИмяВременногоФайла);
    
    СтраницаСправкаРасчетНайдена = Ложь;
    
    
    // средствами 1С
    Попытка
        // Выполняется долго на больших файлах.
        
        ТабличныйДокументЭксельВесь = Новый ТабличныйДокумент;
        ТабличныйДокументЭксельВесь.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    // СпособЧтенияЗначенийТабличногоДокумента - новый параметр платформы 8.3.6. Второе значение "Текст".
        
        
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    СписокЛистовВФайлеЭксель.Ссылка КАК Ссылка,
        |    СписокЛистовВФайлеЭксель.Наименование КАК Наименование
        |ИЗ
        |    Справочник.СписокЛистовВФайлеЭксель КАК СписокЛистовВФайлеЭксель
        |ГДЕ
        |    СписокЛистовВФайлеЭксельДляУдаления.Используется = ИСТИНА
        |    И СписокЛистовВФайлеЭксельДляУдаления.Сохранить = ИСТИНА";
        
        Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование");
        
        // обходим области файла эксель
        Для Каждого ОбластьТД ИЗ ТабличныйДокументЭксельВесь.Области Цикл
            
            // запоминаем какие в файле эксель были страницы, чтобы потом в предприятии включить только нужные
            Справочники.СписокЛистовВФайлеЭксельДляУдаления.ДобавлениеЗаписи(ОбластьТД.Имя);
            
            // Обходим сраницы из спр, и смотрим их в файле, чтобы ее сохранить
            Для каждого СтрРезультат Из Результат Цикл
                Если ВРег(ОбластьТД.Имя) = ВРег(СтрРезультат) Тогда
                    
                    // вытащим нужный лист в Табличный документ и сохраним его
                    ТабличныйДокумент_СтраницаСчет = Новый ТабличныйДокумент;
                    ТабличныйДокумент_СтраницаСчет = ТабличныйДокументЭксельВесь.ПолучитьОбласть(ОбластьТД.Имя);
                    
                    ИмяВременногоФайлаНовый = ПолучитьИмяВременногоФайла(ТипВыбранногоФайла); //"xlsx"
                    ТабличныйДокумент_СтраницаСчет.Записать(ИмяВременногоФайлаНовый, ТипВыбранногоФайла); // Это наш новый файл только с нужной стриницей
                    
                    // для помещения во врем.хранилище для передачи на сервер
                    ДвоичДанные = Новый ДвоичныеДанные(ИмяВременногоФайлаНовый);
                    Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные, Новый УникальныйИдентификатор);
                    
                    СтраницаСправкаРасчетНайдена = Истина;
                конецЕсли;
            КонецЦикла; 
        КонецЦикла;
        
        
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
        Адрес = АдресФайлаНаСервере;
    КонецПопытки;
    
    Если СтраницаСправкаРасчетНайдена = Ложь Тогда
        Сообщить("У файла " + ИмяФайла + "  не найдена страница Справка-расчет или не включена в справочнике СписокЛистовВФайлеЭксельДляУдаления", СтатусСообщения.Важное);
    КонецЕсли; 
    
    
    
    // через COM
    
    //ЛистЭксель = "СФ выд";
    //
    //ИмяВременногоФайла = ПолучитьИмяВременногоФайла(ТипВыбранногоФайла); //"xlsx"
    //ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайлаНаСервере);
    //ДанныеФайла.Записать(ИмяВременногоФайла);
    //
    //УдалосьУдалитьЛист = Истина;
    //
    //Попытка
    //    //ДокExcel = ПолучитьCOMОбъект("","Excel.Application");
    //    ExcelФайл = ДокExcel.WorkBooks.Open(ИмяВременногоФайла);
    //    
    //    Для Сч = 1 По ExcelФайл.Sheets.Count Цикл
    //        
    //        Если Сч > ExcelФайл.Sheets.Count Тогда
    //            Прервать;
    //        КонецЕсли; 
    //        
    //        ИмяЛиста = ExcelФайл.Sheets(Сч).Name;
    //        
    //        Запрос = Новый Запрос;
    //        Запрос.Текст = "ВЫБРАТЬ
    //                       |    СписокЛистовВФайлеЭксельДляУдаления.Ссылка КАК Ссылка,
    //                       |    СписокЛистовВФайлеЭксельДляУдаления.Наименование КАК Наименование
    //                       |ИЗ
    //                       |    Справочник.СписокЛистовВФайлеЭксельДляУдаления КАК СписокЛистовВФайлеЭксельДляУдаления
    //                       |ГДЕ
    //                       |    СписокЛистовВФайлеЭксельДляУдаления.Используется = ИСТИНА
    //                       |    И СписокЛистовВФайлеЭксельДляУдаления.Наименование = &Наименование";
    //        
    //        Запрос.УстановитьПараметр("Наименование", ИмяЛиста);
    //          
    //        Результат = Запрос.Выполнить();
    //        Если НЕ Результат.Пустой() Тогда
    //            ExcelФайл.Sheets(ИмяЛиста).Select();
    //            ExcelФайл.ActiveSheet.Delete();
    //            
    //            Сч = Сч - 1;
    //        КонецЕсли;     
    //    КонецЦикла;
    //    
    //    // начинаем закрывать файл
    //    ДокExcel.DisplayAlerts = 0;
    //    
    //    // сохраняем его в новый временный, для помещения во врем.хранилище на сервер
    //    ИмяВременногоФайлаНовый = ПолучитьИмяВременногоФайла(ТипВыбранногоФайла); //"xlsx"
    //    ExcelФайл.SaveAs(ИмяВременногоФайлаНовый);
    //    ExcelФайл.Close();
    //    
    //    
    //    ДокExcel.DisplayAlerts = 1;
    //    ДокExcel.Quit(); 
    //    ДокExcel = Неопределено;
    //    
    //    // для помещения во врем.хранилище для передачи на сервер
    //    ДвоичДанные = Новый ДвоичныеДанные(ИмяВременногоФайлаНовый);
    //    Адрес =  ПоместитьВоВременноеХранилище(ДвоичДанные, Новый УникальныйИдентификатор);
    //    
    //    
    //    СписокЛистов = ПолучитьСписокЛистов_EXCEL1C(ИмяВременногоФайлаНовый);
    //Исключение
    //    
    //    Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.    " + ОписаниеОшибки());
    //    
    //    СделатьЗаписьЖурналаРегистрации(УровеньЖурналаРегистрации.Предупреждение, "Не удалось удалить лист Excel.    " + ОписаниеОшибки());
    //    
    //    Адрес = АдресФайлаНаСервере;
    //    
    //    УдалосьУдалитьЛист = Ложь;
    //    
    //КонецПопытки;
    //
    //
    //Если УдалосьУдалитьЛист = Ложь Тогда
    //    ДокРеализацияОбъект = ДокРеализацияСсылка.ПолучитьОбъект();
    //    ДокРеализацияОбъект.Коментарий = ДокРеализацияОбъект.Коментарий + " Не удалось удалить лист Excel.";
    //    
    //    Попытка
    //        ДокРеализацияОбъект.Записать();
    //    Исключение
    //        Сообщить(ОписаниеОшибки());
    //    КонецПопытки; 
    //    
    //КонецЕсли; 
    
    
    Возврат Адрес; // Это наш новый файл только с нужной страницей в хранилище
    
КонецФункции

 

has been added to your cart:
Оформление заказа