python - 如何使用pyrtd/pythoncom解决 `pywintypes.com_error`问题?

标签 python pywin32 win32com rtd pythoncom

我正在尝试使用 pyrtd Python模块获取Excel中可以通过RTD获取的信息。

但是,当我尝试运行 sample python script 时,我收到以下错误:

pywintypes.com_error:( -2147221164, 'Class not registered', None, None)

我尝试了其他几个 RTD 函数,有时(当我使用 Dllname.function_name 作为 RTDClient() 的参数时)我得到:

pywintypes.com_error:( -2147221005, 'Invalid class string', None, None)

所有这些 RTD 函数都在 Excel 2010 中运行良好。

我还没有找到适用于 Python 的解决方案,但我已经了解了一些适用于 C# 的技巧:

基本思想是:

  1. 通过ProgID从寄存器表中获取rtd服务器的类类型(例如RTDTime.RTD,您可以在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RTDTime.RTD,如果您已经使用regsvr32来注册 dll)。

    在 C# 中,该函数为 Type.GetTypeFromProgID()我相信Python模块win32com中有相同的功能。

  2. 将服务器类转换为 IRtdServer (Microsoft.Office.Interop.Excel.IRtdServer)。

  3. 然后可以使用IRtdServer.ConnectData(topicID, topic, newData)来获取数据:

    • topicID 似乎是任意随机 int
    • topics是你在Excel中使用的参数,它是一个数组;
    • newData 是一个 bool,如果您请求新数据而不是缓存数据,请将其设置为 True
  4. 但是,我相信如果想要自动更新数据,就需要一个回调事件。

根据the linked blog post ,事件类也可以通过progID获取。 但是我在注册表中没有找到任何

在 C# 中,我认为也许可以创建一个 IRTDUpdateEvent。但我不知道如何用Python处理它。

有人可以帮我解决这些错误吗?

最佳答案

已解决。安装并使用32位ActivePython

http://python.6.x6.nabble.com/Problem-using-win32com-client-Dispatch-on-Win7-64bit-td1957248.html

这可能是因为我正在使用 64 位 python 并尝试获取 32 位 com 对象

关于python - 如何使用pyrtd/pythoncom解决 `pywintypes.com_error`问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181932/

相关文章:

python - 如何在随机森林分类器中找到最大深度?

python - 键盘事件未使用 pywin32 发送到窗口

python - 为什么这个有效的 Tkinter 代码与一些 PyWin32 混合时会崩溃?

python 3.4 :ImportError: no module named win32api

python - win32com.client.Dispatch ("WScript.Shell"究竟是什么)?

winapi - 如何检测Windows是否被锁定?

python - 错误 "The object invoked has disconnected from its clients"- 使用 python 和 win32com 自动化 IE 8

python - 以下代码中的 'null?' 、 'procedure?' 和 'symbol?' 是什么意思?

python - 从原始套接字接收 IP 数据包

python - 将 Sage 符号表达式转换为字符串