Всем здравствуйте помогите пожалуйста.
Продолжаю делать Обработку по расписанию выгрузки из справочника обработок, прошлый вариант начальник забраковал :(.
Дошла до момента, что при создании листа в ексель с названием ИНН организации. Необходимо, что бы осуществлялась проверка названия листа, если лист с ИНН текущей организации существует, то работаем в нем иначе создаем новый. Как все связать не понимаю :(
Поиск необходимого листа и работа с ним
Продолжаю делать Обработку по расписанию выгрузки из справочника обработок, прошлый вариант начальник забраковал :(.
Дошла до момента, что при создании листа в ексель с названием ИНН организации. Необходимо, что бы осуществлялась проверка названия листа, если лист с ИНН текущей организации существует, то работаем в нем иначе создаем новый. Как все связать не понимаю :(
Поиск необходимого листа и работа с ним
Лист = Книга.WorkSheets(ИНН);
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
// Реализация логики команды
Если ИдентификаторКоманды = "ВыгрузкаИнформацииПоОбработкам" Тогда
СсылкаНаОрганизацию = Справочники.Организации.НайтиПоКоду("000000001");
ИНН = СсылкаНаОрганизацию.ИНН;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Excel.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена");
Возврат;
КонецПопытки;
Книга = Excel.Workbooks.Open("C:\2");
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
//Установить значение в ячейку
Лист.Cells(1, 1).Value = "Тестовое значение";
Книга.Save();
Excel.Workbooks.Close();
Excel.Application.Quit();
КонецЕсли;
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
У Вас есть Книга.Worksheets. Наверняка это коллекция значений, которую можно обойти циклом и сравнить Лист.Name каждого элемента с вашим ИНН? Более того к листу можно обращаться по имени типа
Лист = Книга.WorkSheets(ИмяЛиста);
(2) Я только учусь, так, что простите за глупость. Все равно не получается, что то я не правильно делаю :(
Для каждого Лист Из Книга Цикл
Если Книга.WorkSheets(ИНН) Тогда
Прервать;
КонецЕсли;
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
КонецЦикла;
Показать
(3) Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = "ИНН" Тогда
////
КонецЕсли;
КонецЦикла;
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = "ИНН" Тогда
////
КонецЕсли;
КонецЦикла;
(5) Нам нужно создать лист с ИНН = 0123456789:
ИНН = "0123456789":
ЛистСуществует = Ложь;
КоличествоЛистов = Книга.Sheets.Count;
Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = ИНН Тогда
ЛистСуществует = Истина;
КонецЕсли;
КонецЦикла;
Если Не ЛистСуществует Тогда
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
КонецЕсли;
ИНН = "0123456789":
ЛистСуществует = Ложь;
КоличествоЛистов = Книга.Sheets.Count;
Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = ИНН Тогда
ЛистСуществует = Истина;
КонецЕсли;
КонецЦикла;
Если Не ЛистСуществует Тогда
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
КонецЕсли;
(12) Могу еще предложить сделать выбор файла интерактивно из обработки. Создайте у обработки текстовый реквизит "ИмяФайла", поместите его на форму и назначьте ему обработчик "НачалоВыбора":
В отладчике посмотрите значение "Объект.ИмяФайла".
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";
Если ДиалогВыбора.Выбрать() Тогда
Объект.ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
ПоказатьВ отладчике посмотрите значение "Объект.ИмяФайла".
(14) Не может ли быть ситуации, что с этим файлом кто-то работает в данный момент или он открыт у вас из другого места, в терминале к примеру? Проверьте в диспетчере задач запущенные процессы excel, часто бывает так что во время отладки открывается много раз файл и не закрывается корректно, эти процессы висят, но вы их не видите.
Не совсем уже понимаю, у вас файл интерактивно через Файл-Открыть тоже не доступен? Просто на сервере через проводник у вас он доступен?
Не совсем уже понимаю, у вас файл интерактивно через Файл-Открыть тоже не доступен? Просто на сервере через проводник у вас он доступен?
Вы также можете попытаться создавать листы через Попытку, эксель должен выдавать ошибку если лист уже существует, в vba есть реализация функции по проверке наличия листа таким способом, т.е. примерно так (может сработать, но это догадки):
Попытка
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
Исключение
Сообщить(ОписаниеОшибки() + СтрШаблон("Лист с наименованием %1 уже существует", ИНН));
КонецПопытки;
Попытка
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
Исключение
Сообщить(ОписаниеОшибки() + СтрШаблон("Лист с наименованием %1 уже существует", ИНН));
КонецПопытки;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот