1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 67
|
|||||||||||
1 | |||||||||||
Закрытие файла Excel15.11.2018, 16:08. Показов 10943. Ответов 5
Метки нет (Все метки)
Как правильно закрыть файл Excel после работы с ним?
Вот код, который как-бы закрывает книгу
Добавлено через 1 час 57 минут В общем я не нашёл элегантного решения (я думал можно как-то связать запущенный файл и ID процесса, но не нашёл такого), решил задачу в лоб. Так как у меня могут быть запущены более ранние процессы Экзеля, то просто выводится список всех процессов Экзель и даётся право выбора. При выборе - выбранный процесс и все процессы Экзель запущенные после него будут закрыты.
0
|
15.11.2018, 16:08 | |
Ответы с готовыми решениями:
5
Переформатирование Excel файла Корректное закрытие файла Excel Коректное закрытие Excel Корректное закрытие Excel |
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||||||
15.11.2018, 16:19 | 2 | ||||||||||
Почему как-бы?
У меня подобный же код не оставляет excel в процессах:
0
|
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 67
|
||||||
16.11.2018, 10:04 [ТС] | 3 | |||||
Благодарю за ответ. Я сделал как вы и предлагали, но ничего не изменилось. Никаких предупреждений не появилось, а в процесс всё равно остаётся.
Я несколько изменил подход к убитию процесса:
0
|
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|
16.11.2018, 10:56 | 4 |
А вы уверенны, что остаётся именно тот excel, который был запущен этим скриптом?
А если в момент создания переменной $original уже будет более 1 excel процесса?
0
|
16.11.2018, 17:43 | 5 | ||||||||||||||||||||||||||||||
KDE777,
Вероятно, в тех случаях когда, процесс не завершается при вызове метода quit() и идет попытка вызова ReleaseComObject, то он возвращает ненулевое значение, соответственно, объект не освобождается. По какой причине мне сложно сказать, здесь нужны углубленные знания. У меня есть подобная проблема, я бы тоже не отказался от помощи, но товарищ Убежденный с форума ушел Если с Excel еще можно привязаться к процессом, костыльным методом, то в моем случае этого не сделать. Если вкратце я использую 1С-COM соединение, которое коннектится к кластеру на сервере и выполняет определенный код. Вся проблема в том, что после выполнения кода, сеанс не снять никаким образом... Штатного метода типа CLOSE(),QUIT(), или DISPOSE() не реализовано. Выглядит примерно так.
Например, сразу после его создания вызвать
Однако мне не нужно сразу после создания коннекта сразу его завершать, а надо выполнить код. Поэтому, далее создается еще цепочка COM-объектов
Собственно, если после всего этого попытаться освободить все ком-объекты, через ReleaseComObject
Посколько переменная $vigruzka - хранит все табличные данные обернутые COM-объектом, то ее надо обработать. Вот тут и начинаются сложности. Если попытаться подсунуть ее в цикл Foreach, причем в пустой, или даже хотя бы просто вывести ее содежимое
Почему так, я не понимаю. Добавлено через 4 часа 21 минуту Все, в своей проблеме я разобрался. Все из-за кривых рук разработчиков 1С. По поводу Excel, советую понаблюдать за возращаемым значением ReleaseComObject, если он отличен от нуля, то освобождение объекта не происходит. Можете попробовать использовать FINALReleaseComObject
0
|
210 / 59 / 26
Регистрация: 16.06.2016
Сообщений: 193
|
||||||
16.11.2018, 20:44 | 6 | |||||
Да-да, так сегодня и делал (; Судя по форумам, это давняя проблема ?..
0
|
16.11.2018, 20:44 | |
16.11.2018, 20:44 | |
Помогаю со студенческими работами здесь
6
Закрытие процесса Excel Закрытие Excel из приложения ВБ Правильное закрытие Excel Корректное закрытие окна Excel Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |