无法使用win32com on Python完全关闭Excel [英] Can't close Excel completely using win32com on Python
问题描述
这是我的代码,我发现了 VBA ,.NET框架的很多答案,很奇怪。当我执行这个,Excel关闭。
This is my code, and I found many answers for VBA, .NET framework and is pretty strange. When I execute this, Excel closes.
from win32com.client import DispatchEx
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wbs.Close()
excel.Quit()
wbs = None
excel = None # <-- Excel Closes here
但是当我执行以下操作时,它不会关闭。
But when I do the following, it does not close.
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wb = wbs.Open('D:\\Xaguar\\A1.xlsm')
wb.Close(False)
wbs.Close()
excel.Quit()
wb = None
wbs = None
excel = None # <-- NOT Closing !!!
我在Stack Overflow问题中发现了一些可能的答案 Intercel进程在互操作之后保持打开;传统方法无法运作 。问题是,不是Python,我找不到 Marshal.ReleaseComObject
和 GC
。我查看了 ... site-packages / win32com
和其他人的所有演示。
I found some possible answer in Stack Overflow question Excel process remains open after interop; traditional method not working. The problem is that is not Python, and I don't find Marshal.ReleaseComObject
and GC
. I looked over all the demos on ...site-packages/win32com
and others.
我在 基于窗口名称(win32)的杀死进程 。
可能不是正确的方法,但工作原理是:
May be not the proper way, but a workround is:
def close_excel_by_force(excel):
import win32process
import win32gui
import win32api
import win32con
# Get the window's process id's
hwnd = excel.Hwnd
t, p = win32process.GetWindowThreadProcessId(hwnd)
# Ask window nicely to close
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
# Allow some time for app to close
time.sleep(10)
# If the application didn't close, force close
try:
handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, p)
if handle:
win32api.TerminateProcess(handle, 0)
win32api.CloseHandle(handle)
except:
pass
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wb = wbs.Open('D:\\Xaguar\\A1.xlsm')
wb.Close(False)
wbs.Close()
excel.Quit()
wb = None
wbs = None
close_excel_by_force(excel) # <--- YOU #@#$# DIEEEEE!! DIEEEE!!!
推荐答案
尝试:
wbs.Close()
excel.Quit()
del excel # this line removed it from task manager in my case
这篇关于无法使用win32com on Python完全关闭Excel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!