gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:19 26 4
gpt4 key购买 nike

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

但是,当我尝试运行 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, topics, newData) 获取数据:

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

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

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com