Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用win32com.client.dispatch函数在python中打开Excel和Word时的不同行为_Python_Pywin32_Win32com - Fatal编程技术网

使用win32com.client.dispatch函数在python中打开Excel和Word时的不同行为

使用win32com.client.dispatch函数在python中打开Excel和Word时的不同行为,python,pywin32,win32com,Python,Pywin32,Win32com,我是python开发的新手 我正在尝试练习win32com.client模块,但出现了一些非常混乱的错误 首先,我试过了 import win32com.client word = win32com.client.Dispatch("Word.Application") word.Visible = True 显然,它工作得很好。所以我在下面试了一下 import win32com.client excel = win32com.client.Dispatch("

我是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一样工作,但几秒钟后就关闭了。我不知道为什么会发生这种情况。

看起来这个词的行为并不像人们想象的那个样直接。Word应用程序必须由模块进行垃圾收集,但事实并非如此。您可以在解释器中使用
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文档中找到

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

app.Quit()

只是想澄清一下,你是在运行脚本还是在调试它?我总是使用
win32com.client.gencache.EnsureDispatch('Excel.Application')
你能测试一下这是否会导致同样的问题吗?@ds4940没有错误脚本或日志,因为它运行得很好,但只有Excel关闭得很好soon@tst非常感谢。这种方法可以解决我兄弟。很好用,很好用。非常感谢。我想知道我学会了输入法就像C语言中的“scanf”,不是吗?但在您的代码中,它的工作原理类似于“printf”,对吗?Python中的@ShinMin Young
input
也会读取回复。我猜这就像C中的printf和fgets一样。关于它的信息可以在这里找到: