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

11.02.20

Интеграция - Загрузка и выгрузка в Excel

Как средствами 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.";
    //    
    //    Попытка
    //        ДокРеализацияОбъект.Записать();
    //    Исключение
    //        Сообщить(ОписаниеОшибки());
    //    КонецПопытки; 
    //    
    //КонецЕсли; 
    
    
    Возврат Адрес; // Это наш новый файл только с нужной страницей в хранилище
    
КонецФункции

 

См. также

SALE! 15%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 1C:Бухгалтерия 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С.

6000 руб.

09.11.2016    241886    1113    908    

1042

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, Детский мир, МагнитЭкспресс (быв.Казань-Экспресс), Леруа Мерлен, ЭНФАНТА (Акушерство), ЛаМода, Летуаль, Твой дом, Золотое Яблоко в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:КА 2, 1С:ERP Управление предприятием. Возможность подключить любые маркетплейсы. Анализ продаж ОZON. 30 дней БЕСПЛАТНОГО пользования!

5400 руб.

12.08.2021    37820    404    68    

172

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 10.02.2025, версия 9.9 - 9.15)

16800 руб.

20.11.2015    159182    390    378    

519

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Платные (руб)

Обработки загрузки данных о продажах WildBerries предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3

4800 руб.

11.12.2019    59352    1016    3    

253

ЭДО и ОФД Загрузка и выгрузка в Excel Бухгалтер Бухгалтерский учет 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Платные (руб)

Кто получает документы в формате XML из различных сервисов ЭДО (формат 820 приказ ФНС 31 мая 2019) и набивает их вручную в 1С, тот наверняка хотел бы автоматизировать этот процесс. Поддержка конфигураций: Бухгалтерии 3, УПП 1.3, 1С:КА 2.4 и 1С:КА 2.5, УТ10, УТ11.4 и УТ11.5. Для бухгалтерии 3 добавлена поддержка формат 5.03 от 23/01/2025

3600 руб.

11.02.2020    94625    319    157    

232

SALE! 30%

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загружает данные по Акту приемки товара от ООО «Вайлдберриз» (поставок), полученный из личного кабинета в формате *.xlsx или API (FBO, FBS) в документ "Реализация (акты, накладные, УПД)" для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP 2 Управление предприятием и Управление нашей фирмой 3.0

4800 руб.

24.01.2021    21249    86    0    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 28.01.20 14:45 Сейчас в теме
Создать справочник чтобы на основе элементов этого справочника принимать решение удалить что-то в эксель или нет?

вы серьезно?
осмыслив эту идею и бегло пробежав код пришел к выводу, что
пропагандист подобных идей социально безответственный человек,
ибо такие идеи и код вредны для неокрепших умов.

да и неплохо бы сп читать и открывать для себя новое, например
метод ПакетОтображаемыхДокументов
который позволяет выполнить задачу без комов и тонн непонятного кода.
wolfsoft; Kolzah; ltfriend; +3 Ответить
2. pavel_pss 290 28.01.20 17:16 Сейчас в теме
(1) суть кода не в справочнике, это как пример запомнить какие страницы удалять из эксель!!!!!

И задача решается средствами 1С, а не через ком.

А метод "ПакетОтображаемыхДокументов" вообще не относится к решению текущей статьи. (Набор документов, которые нужно распечатать или сохранить в файл вместе.)

Поэтому за метод спасибо, но не нужно поливать грязью, то в чем не разобрались!!!

Я же показываю как из файла эксель с несколькими страницами удалить лишние страницы и оставить только нужные.
5. VmvLer 28.01.20 17:37 Сейчас в теме
(2) идея вредная, код ректальный - это мое объективное мнение .
А метод "ПакетОтображаемыхДокументов" может решить задачу из текущей статьи.

Если вы сможете найти решение этим методом, то ваша карма станет светлее.
3. MishaD 14 28.01.20 17:31 Сейчас в теме
Версию платформы укажите. Метод "Прочитать" файлы Эксель стал читать только с платформы 8.3.6, причем только первый лист. Возможность читать все листы появилась только в 8.3.10.
pavel_pss; +1 Ответить
4. pavel_pss 290 28.01.20 17:37 Сейчас в теме
6. bobank 203 28.01.20 18:41 Сейчас в теме
на счет нужности ненужных страниц спорно, а в остальном - хороший методический материал.
7. ltfriend 28.01.20 20:35 Сейчас в теме
Если в процедуре УдалитьЛистыЭксель при записи нового элемента произойдёт ошибка, то пользователь об этом не узнает, пока не посмотрит журнал регистрации.
8. pavel_pss 290 29.01.20 09:32 Сейчас в теме
(7) ну это сообщение уже на усмотрение программиста, просто подобный алгоритм может делаться ночью в фоне, поэтому запись только в журнал.
9. Pixar0000 06.02.20 00:18 Сейчас в теме
похоже на то, что "сидели с пацанами пили пиво" и тут генеральный "нагнул" - давно такого бреда не видел
10. Pixar0000 06.02.20 00:19 Сейчас в теме
говнокод в Исключении "запёр"
11. pavel_pss 290 07.02.20 12:31 Сейчас в теме
(10)прежде чем осуждать, напиши правильно и другие решат что говнокод а что нет! А сотрясать воздух все могут не подкрепляя!!!
12. pavel_pss 290 07.02.20 12:32 Сейчас в теме
(10)то то кроме комментов у тебя ничего нет!!! наверное боишься что твой доброкод сольют.
Оставьте свое сообщение