我正在尝试使用 Python 的pyrtd模块来获取可以通过 RTD 在 Excel 中获取的信息。
但是,当我尝试运行示例 python 脚本时,我收到以下错误:
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# 的技巧:
- 用于 Excel 实时数据 (RTD) 服务器的 AC# 客户端
- C# 中的 Excel RTD 客户端
- http://bbs.csdn.net/topics/320252117
- Excel RTD 服务器:C# 中的多个主题
基本思想是:
从注册表中获取 rtd 服务器的类类型
ProgID
(例如,如果您已经使用regsvr32注册了 dll ,则RTDTime.RTD
可以在 中找到它们)。HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RTDTime.RTD
在 C# 中,函数是
Type.GetTypeFromProgID()
. 我相信 Python 模块中有相同的功能win32com
。将服务器类强制转换为
IRtdServer
(Microsoft.Office.Interop.Excel.IRtdServer
)。然后可以
IRtdServer.ConnectData(topicID, topics, newData)
用来获取数据:topicID
似乎是随机的int
;topics
是你在Excel中使用的参数,它是一个数组;newData
是 abool
,True
如果您请求新数据而不是缓存数据,请将其设置为。
但是,我相信如果想要自动更新数据,则需要一个回调事件。
根据链接的博客文章,事件类也可以通过progID
。但我在 reg 表中没有找到任何内容。
在 C# 中,我认为可以创建一个IRTDUpdateEvent
. 但我不知道如何用 Python 处理它。
有人可以帮我解决这些错误吗?