类型错误:此COM对象无法自动执行makepy进程-请手动运行此对象的makepy。

9
这是一种什么样的错误?
追踪(Traceback)错误
C:\Users\DELL\PycharmProjects\MyNew\venv\Scripts\python.exe 
C:/Users/DELL/PycharmProjects/MyNew/agaaaaain.py
Traceback (most recent call last):
  File "C:\Users\DELL\PycharmProjects\MyNew\venv\lib\site- 
packages\win32com\client\gencache.py", line 530, in EnsureDispatch
    ti = disp._oleobj_.GetTypeInfo()
pywintypes.com_error: (-2147418111, 'Call was rejected by callee.', None, 
None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/DELL/PycharmProjects/MyNew/agaaaaain.py", line 3, in 
<module>
excel = win32.gencache.EnsureDispatch('Excel.Application')
 File "C:\Users\DELL\PycharmProjects\MyNew\venv\lib\site- 
packages\win32com\client\gencache.py", line 541, in EnsureDispatch
raise TypeError("This COM object can not automate the makepy process - 
please run makepy manually for this object")
TypeError: This COM object can not automate the makepy process - please run 
makepy manually for this object

Process finished with exit code 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/DELL/PycharmProjects/MyNew/agaaaaain.py", line 3, in 
<module>
excel = win32.gencache.EnsureDispatch('Excel.Application')
  File "C:\Users\DELL\PycharmProjects\MyNew\venv\lib\site- 
packages\win32com\client\gencache.py", line 541, in EnsureDispatch
    raise TypeError("This COM object can not automate the makepy process - 
please run makepy manually for this object")
TypeError: This COM object can not automate the makepy process - please run 
makepy manually for this object

这是我的代码:

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')

我正在使用PyCharmVirtualEnv

我没有找到任何解决方法,有没有人有这方面的想法?

注意:我正在尝试使用win32来访问excel工作簿,以便能够进行修改!


6
最近我遇到了相同的问题。在任务管理器中结束EXCEL进程。 - ervinbosenbacher
7个回答

14

我也遇到了相同的问题,通过关闭所有正在运行的Excel应用程序来解决它。


1

如果有人运行以下代码时出现错误: excel = win32.gencache.EnsureDispatch('Excel.Application') 你需要检查一下 Excel 是否有任何通知,需要关闭它们,然后代码就可以运行了。如果找不到任何通知,请尝试关闭 Excel。


0

我曾经遇到过同样的问题...在我的情况下,通过添加这两行代码解决了问题:

workbook.Close(SaveChanges=True)
xl.Quit()

0

手动运行makepy:使用PythonWin环境(应与pywin32一起安装)为Excel COM对象生成必要的包装器。

打开PythonWin:

  • PythonWin是一个与pywin32捆绑在一起的集成开发环境。您可以在pywin32安装的目录中找到它,通常类似于PythonXX\Lib\site-packages\pythonwin\PythonWin.exe,其中XX是您的Python版本。 运行PythonWin。您可以导航到文件夹并双击PythonWin.exe,或者从开始菜单中启动它(如果已添加)。

访问COM MakePy实用程序:

  • 在PythonWin中,导航到菜单栏并选择工具。
  • 从下拉菜单中选择COM MakePy实用程序。

找到Microsoft Excel库:

  • 一个对话框将出现,列出系统上注册的所有COM库。
  • 向下滚动以找到Microsoft Excel的库。它通常会被命名为类似于“Microsoft Excel XX.X Object Library”的名称,其中XX.X是版本号(例如,Excel 2016的版本号为16.0)。

生成Python包装器:

一旦您找到并选择了适用于Microsoft Excel的适当库,请点击“确定”。
该工具将为Excel COM对象生成Python包装器。您将在PythonWin输出控制台中看到进度。
在进程完成后,Excel COM对象的Python包装器将被缓存,您应该能够使用win32com.client与Excel进行接口操作,而不会遇到“无法自动创建makepy”的错误。

0

如果在您的实例(即一个For循环)中多次运行以下代码行:excel = win32.gencache.EnsureDispatch('Excel.Application'),也可能会出现问题。


0
在我的情况下,我正在不同的线程上使用事件,并且我忘记将coinit_flags设置为零,例如:
# ...
import sys
sys.coinit_flags = 0  # pythoncom.COINIT_MULTITHREADED == 0
from win32com.client import *
from win32com.client.connect import *
# ...

-2

你必须考虑从虚拟环境中运行代码。

并卸载环境外的任何其他pywin32模块。

试一试吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接