Не получается закрыть процесс Excel

1. melyssa 14.04.15 16:03 Сейчас в теме
Добрый день!

Никак не могу закрыть файл 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;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Martinian 10 14.04.15 16:05 Сейчас в теме
(1) melyssa, вот этого достаточно: Excel.Quit();

Перезагрузите компьютер.
3. Boneman 298 14.04.15 16:05 Сейчас в теме
(1) melyssa, можно процесс кильнуть ))
4. melyssa 14.04.15 16:23 Сейчас в теме
(3) Boneman, (2) Martinian, спасибо. но дело не в том, что оно лично мне мешает - менеджеры будут использовать обработку и будет висеть куча незавершенных процессов - это не очень хорошо.

Excel.Quit(); - пробовала - все равно висит((
5. Boneman 298 14.04.15 16:26 Сейчас в теме
(4) melyssa, я и говорю, сделай по окончанию процедуры kill процесса из памяти.
что то типа
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run("taskkill /f /im " + путь к программе, 0);

про ключи таккилла можно почитать тут
6. melyssa 14.04.15 16:34 Сейчас в теме
(5) Boneman, в смысле? из 1С можно убить процесс винды? а как? Или Вы имеете в виду открыть диспетчер приложений и завершить процесс вручную?
7. melyssa 14.04.15 16:34 Сейчас в теме
(5) Boneman, спасибо, попробую
9. Caspersky 14.04.15 16:58 Сейчас в теме
(5) Boneman, Можно конечно и так, кардинально...
но, кажется мне, что при "правильном" коде и штатного выхода достаточно.
11. Boneman 298 14.04.15 17:06 Сейчас в теме
(9) Caspersky, ну разные ситуации бывают.
Я вот тоже иногда замечаю, что в памяти процессы остаются, и держат файл открытым, хотя все обработки давно оттестированы и сто лет работают.
Связывал это с профилями юзеров, кэшированием, нашей специфичной организацией сети, или с самими экселями непонятного происхождения и версий, короче х.з.. правда сам так процессы не убивал, но если проблема есть, то должно помочь.
8. Caspersky 14.04.15 16:54 Сейчас в теме
(1) melyssa, 1. Обрабатывайте исключительные ситуации в процессе работы с файлом. Это очень частая причина "зависших" процессов.
(4) melyssa, 2. А вы это утверждаете на основании того что увидели "зависшие" процессы на сервере, или на основании тестирования выполнения обработки от А до Я...?
Если не тестировали, и это: "Excel.Quit(); - пробовала - все равно висит((", всего лишь предположение см. 1.
10. pablo_escobar 14.04.15 17:05 Сейчас в теме
(1) melyssa, А зачем Вы 2 раза эксель открываете?
LifeRock; +1 Ответить
12. Caspersky 14.04.15 17:08 Сейчас в теме
(10) pablo_escobar, ))) " ... а слона то и не приметили...)
14. Boneman 298 14.04.15 17:39 Сейчас в теме
13. melyssa 14.04.15 17:36 Сейчас в теме
(10) pablo_escobar, Точно!! И правда, слона не приметила))) Спасибо огромное!! Все отлично закрывается.
15. sfihks 43 22.06.23 14:32 Сейчас в теме
Столкнулся с той же проблемой. В поисках решения.
Сам процесс - много независимых обработок екселя. Формирование и отправка поставщикам ексель файлов по расписанию, получение от них ответов и обработка, получение заказов в ексель, накладные также в екселе приходят все обрабатывается фоновыми заданиями. Что-то по расписанию, что-то по наличию новых писем. Также менеджеры вручную подгружают некоторые файлы.
Каждый процесс через com получает файл, читает и закрывает. В исключениях также прописана либо Excell = 0, либо сначала Quit() потом =0.
За час обрабатывается от 10 до 100 файлов. в разное время по-разному. Сеансы зависают не всегда.
Чем плохо - при 20 процессах excell 21 не открывается. пишет нет такого приложения.
Сейчас стоит скрипт, убивающий процессы старше 15 минут 1 раз в час. Все обработки екселя всегда короткие, т.к. файл читаем в тз и сразу закрываем. обработка уже позже идет.

Кто может подсказать, возможно есть успешные решения данной проблемы?
Определить систему, когда именно зависает не получилось.
Как определить, какой именно файл висит тоже не знаю как. Возможно виндус как-то может, но не нашел пока.
16. user1619761 22.06.23 15:06 Сейчас в теме
(15) была похожая ситуация, помогло ПодключитьОбработчикОжидания. Сделал интервал между чтением файла 3 секунды, видимо не успевает система какие то файлы обработать, когда их слишком много (мои догадки). Ну либо батник запускать по завершению работы эксель после чтения файла. Но в этом случае будут завершены все процессы.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот