Удаление из файла эксель ненужных страниц средствами 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! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

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

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210195    620    524    

439

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в 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 Платные (руб)

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

13200 руб.

20.11.2015    150733    365    375    

501

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

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

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15084    79    0    

60

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 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С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101398    296    173    

312

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

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

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    214945    923    886    

939

Универсальная загрузка остатков и цен поставщиков в 1С (УТ 11, КА 2, ERP 2.0) из файлов Excel, CSV, XML (YML и CML)

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

Обработка позволяет легко настроить загрузку прайс-листов и остатков поставщиков. Форматы файлов задаются для каждого поставщика отдельно. В настройках предусмотрена возможность гибкой обработки входящих данных (убрать лишние символы, пересчитать цены в другую валюту, сделать произвольную наценку и т.д.).

12000 руб.

23.01.2017    58863    59    48    

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

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

да и неплохо бы сп читать и открывать для себя новое, например
метод ПакетОтображаемыхДокументов
который позволяет выполнить задачу без комов и тонн непонятного кода.
wolfsoft; Kolzah; ltfriend; +3 Ответить
2. pavel_pss 289 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 289 28.01.20 17:37 Сейчас в теме
6. bobank 200 28.01.20 18:41 Сейчас в теме
на счет нужности ненужных страниц спорно, а в остальном - хороший методический материал.
7. ltfriend 954 28.01.20 20:35 Сейчас в теме
Если в процедуре УдалитьЛистыЭксель при записи нового элемента произойдёт ошибка, то пользователь об этом не узнает, пока не посмотрит журнал регистрации.
8. pavel_pss 289 29.01.20 09:32 Сейчас в теме
(7) ну это сообщение уже на усмотрение программиста, просто подобный алгоритм может делаться ночью в фоне, поэтому запись только в журнал.
9. Pixar0000 06.02.20 00:18 Сейчас в теме
похоже на то, что "сидели с пацанами пили пиво" и тут генеральный "нагнул" - давно такого бреда не видел
10. Pixar0000 06.02.20 00:19 Сейчас в теме
говнокод в Исключении "запёр"
11. pavel_pss 289 07.02.20 12:31 Сейчас в теме
(10)прежде чем осуждать, напиши правильно и другие решат что говнокод а что нет! А сотрясать воздух все могут не подкрепляя!!!
12. pavel_pss 289 07.02.20 12:32 Сейчас в теме
(10)то то кроме комментов у тебя ничего нет!!! наверное боишься что твой доброкод сольют.
Оставьте свое сообщение