Добрый день!
Никак не могу закрыть файл Excel после загрузки - Microsoft Excel висит в процессах.
Вроде бы куча материала по этому поводу - все перепробовала. Может кто увидит где загвоздка:
Никак не могу закрыть файл Excel после загрузки - Microsoft Excel висит в процессах.
Вроде бы куча материала по этому поводу - все перепробовала. Может кто увидит где загвоздка:
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Объект.Таблица.Очистить();
//подключаемся к Excel
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
//Открываем необходимый лист
Excel.Sheets(1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
//ОтменитьТранзакцию();
Возврат;
КонецПопытки;
Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
Конецесли;
Для НС = 2 по ФайлСтрок Цикл // НС указываем с какой строки начинать обработку
Состояние("Файл "+Строка(ИмяФайла)+": Обрабатывается первый лист "+Строка(Формат(?(ФайлСтрок=0,0,((100*НС)/ФайлСтрок)),"ЧЦ=3; ЧДЦ=0"))+" %");
ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
НоваяСтрока = Объект.Таблица.Добавить();
НоваяСтрока.Артикул = Excel.Cells(НС, 1).Text;
НоваяСтрока.Наименование = Excel.Cells(НС, 2).Text;
НоваяСтрока.Цена = Excel.Cells(НС, 3).Text;
КонецЦикла;
Excel.Workbooks.Close();
Excel.Application.Quit();
Excel.Quit();
Excel = 0;
ПоказатьПо теме из базы знаний
- Загрузка чеков ФНС в документы 1С:БП, 1С:УНФ, 1С:ERP, 1С:КА и 1С:УТ
- Файлы-процессы, динамическая работа с формами и многое другое в Simple UI. Ноябрь 2021
- Интервью по опыту перехода с SAP на 1С: «Процессы тяжело переводить, а персонал хорошо переходит»
- ФинОфис. Контроль и управление финансами. Практика применения
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(9) Caspersky, ну разные ситуации бывают.
Я вот тоже иногда замечаю, что в памяти процессы остаются, и держат файл открытым, хотя все обработки давно оттестированы и сто лет работают.
Связывал это с профилями юзеров, кэшированием, нашей специфичной организацией сети, или с самими экселями непонятного происхождения и версий, короче х.з.. правда сам так процессы не убивал, но если проблема есть, то должно помочь.
Я вот тоже иногда замечаю, что в памяти процессы остаются, и держат файл открытым, хотя все обработки давно оттестированы и сто лет работают.
Связывал это с профилями юзеров, кэшированием, нашей специфичной организацией сети, или с самими экселями непонятного происхождения и версий, короче х.з.. правда сам так процессы не убивал, но если проблема есть, то должно помочь.
(1) melyssa, 1. Обрабатывайте исключительные ситуации в процессе работы с файлом. Это очень частая причина "зависших" процессов.
(4) melyssa, 2. А вы это утверждаете на основании того что увидели "зависшие" процессы на сервере, или на основании тестирования выполнения обработки от А до Я...?
Если не тестировали, и это: "Excel.Quit(); - пробовала - все равно висит((", всего лишь предположение см. 1.
(4) melyssa, 2. А вы это утверждаете на основании того что увидели "зависшие" процессы на сервере, или на основании тестирования выполнения обработки от А до Я...?
Если не тестировали, и это: "Excel.Quit(); - пробовала - все равно висит((", всего лишь предположение см. 1.
Столкнулся с той же проблемой. В поисках решения.
Сам процесс - много независимых обработок екселя. Формирование и отправка поставщикам ексель файлов по расписанию, получение от них ответов и обработка, получение заказов в ексель, накладные также в екселе приходят все обрабатывается фоновыми заданиями. Что-то по расписанию, что-то по наличию новых писем. Также менеджеры вручную подгружают некоторые файлы.
Каждый процесс через com получает файл, читает и закрывает. В исключениях также прописана либо Excell = 0, либо сначала Quit() потом =0.
За час обрабатывается от 10 до 100 файлов. в разное время по-разному. Сеансы зависают не всегда.
Чем плохо - при 20 процессах excell 21 не открывается. пишет нет такого приложения.
Сейчас стоит скрипт, убивающий процессы старше 15 минут 1 раз в час. Все обработки екселя всегда короткие, т.к. файл читаем в тз и сразу закрываем. обработка уже позже идет.
Кто может подсказать, возможно есть успешные решения данной проблемы?
Определить систему, когда именно зависает не получилось.
Как определить, какой именно файл висит тоже не знаю как. Возможно виндус как-то может, но не нашел пока.
Сам процесс - много независимых обработок екселя. Формирование и отправка поставщикам ексель файлов по расписанию, получение от них ответов и обработка, получение заказов в ексель, накладные также в екселе приходят все обрабатывается фоновыми заданиями. Что-то по расписанию, что-то по наличию новых писем. Также менеджеры вручную подгружают некоторые файлы.
Каждый процесс через com получает файл, читает и закрывает. В исключениях также прописана либо Excell = 0, либо сначала Quit() потом =0.
За час обрабатывается от 10 до 100 файлов. в разное время по-разному. Сеансы зависают не всегда.
Чем плохо - при 20 процессах excell 21 не открывается. пишет нет такого приложения.
Сейчас стоит скрипт, убивающий процессы старше 15 минут 1 раз в час. Все обработки екселя всегда короткие, т.к. файл читаем в тз и сразу закрываем. обработка уже позже идет.
Кто может подсказать, возможно есть успешные решения данной проблемы?
Определить систему, когда именно зависает не получилось.
Как определить, какой именно файл висит тоже не знаю как. Возможно виндус как-то может, но не нашел пока.
(15) была похожая ситуация, помогло ПодключитьОбработчикОжидания. Сделал интервал между чтением файла 3 секунды, видимо не успевает система какие то файлы обработать, когда их слишком много (мои догадки). Ну либо батник запускать по завершению работы эксель после чтения файла. Но в этом случае будут завершены все процессы.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот