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