使用Python上的win32com无法完全closuresExcel
这是我的代码,我发现很多VBA ,.NET框架的答案,很奇怪。 当我执行这个时,Excelclosures。
from win32com.client import DispatchEx excel = DispatchEx('Excel.Application') wbs = excel.Workbooks wbs.Close() excel.Quit() wbs = None excel = None # <-- Excel Closes here
但是,当我做了以下,它不closures。
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 !!!
我发现一些可能的答案堆栈溢出问题Excel进程仍然打开后互操作; 传统的方法不工作 。 问题是,这不是Python,我没有findMarshal.ReleaseComObject
和GC
。 我查看了...site-packages/win32com
和其他所有的演示。
即使不打扰我,如果我能得到PID并杀死它。
我发现基于窗口名称(win32)在杀死过程中的解决方法。
可能不是正确的方法,但一个workround是:
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
我在使用Excel的文件中有这个:
self.excel.Application.Quit()
- 从Python操作Excel
- 为什么Excel.WorkSheet.Copy引发具有HRESULT的types为“System.Runtime.InteropServices.COMException”的第一次机会exception的exception:0x800A03EC
- 为什么ITypeInfo :: GetIDsOfNames不工作?
- 从VBA中调用计算密集的例程而不拖延Excel GUI
- 有没有办法阻止Excel自动将Application.ScreenUpdating设置为True
- 阅读大型Excel表(猜测大小)
- 用ctrl + q发送excel文件
- 加载所有COMtypes的Exceldynamic?
- Excel.exe应用程序完成使用时不closures