首页 > 解决方案 > 使用 win32com.client.dispatch 函数在 python 中打开 Excel 和 Word 时的不同行为

问题描述

我是python开发的新手。

我正在尝试练习 win32com.client 模块,并且出现了一些非常困惑的错误。

首先,我试过了。

import win32com.client
word = win32com.client.Dispatch("Word.Application")
word.Visible = True 

显然,它运作良好。所以我在下面尝试了。

import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True

它像 Word 一样工作,但几秒钟后就关闭了。我不知道为什么会这样。

标签: pythonpywin32win32com

解决方案


看起来 Word 的行为并不像它应该的那样直接。Word 应用程序必须由gc模块进行垃圾收集,但事实并非如此。您可以input在解释器中使用终止执行的肤浅视图:

import win32com.client
app = win32com.client.Dispatch("Excel.Application")
app.Visible = True
input('deleting reference...')
# deleting reference forces gc to clear Excel
# though Word remains uncollected even thereafter
del app
input('Exit...')

Python 内存管理相当复杂,当 Python 嵌入到其他应用程序中时,它就会成为一个问题。您可以在文章Python 如何管理内存?(可能已经过时,但可能有助于共同理解)或 Python 的文档Memory Management

好的方法是使用Quit从内存中正确释放应用程序的方法显式关闭它:

app.Quit()

推荐阅读