首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pyrtd/pythoncom绕过`pywintypes.com_error`?

如何使用pyrtd/pythoncom绕过`pywintypes.com_error`?
EN

Stack Overflow用户
提问于 2014-08-07 11:58:30
回答 2查看 12.8K关注 0票数 2

我正在尝试使用吡虫啉模块来获取可以通过RTD在Excel中获取的信息。

但是,当我尝试运行示例python脚本时,会得到以下错误:

代码语言:javascript
复制
pywintypes.com_error:( -2147221164, 'Class not registered', None, None)

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

代码语言:javascript
复制
pywintypes.com_error:( -2147221005, 'Invalid class string', None, None)

所有这些RTD函数在Excel 2010中都能很好地工作。

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

其基本思想是:

  1. 通过ProgID从注册表中获取rtd服务器的类类型(例如,RTDTime.RTD,如果您已经使用regsvr32注册了dll,您可以在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RTDTime.RTD中找到它们)。 在C#中,函数是Type.GetTypeFromProgID()。我相信在win32com.模块中有一个相同的函数
  2. 将服务器类强制转换为IRtdServer (Microsoft.Office.Interop.Excel.IRtdServer)。
  3. 然后可以使用IRtdServer.ConnectData(topicID, topics, newData)获取数据:
代码语言:javascript
复制
- `topicID` seems to be any random `int`;
- `topics` is the parameters you used in Excel, it is an array;
- `newData` is a `bool`, set it to be `True` if you request new data and not the cached data.

  1. 但是,我相信如果想要自动更新数据,就需要回调事件。

根据链接的博客文章,事件类也可以由progID获得。,但我还没有在reg表中找到一个。

IRTDUpdateEvent**.中的--我认为也许可以创建一个但我不知道如何处理Python。**

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

EN

回答 2

Stack Overflow用户

发布于 2014-08-08 06:07:17

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

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

可能是因为我使用64位python并试图获取32位com对象。

票数 2
EN

Stack Overflow用户

发布于 2014-08-08 08:25:14

附注:

pyrtd模块只支持单个主题订阅。

用户需要在pyrtd.py上进行很少的修改才能传递一个元组来启用多个主题子:

Line116

代码语言:javascript
复制
self._rtd.ConnectData(id, list(topic), True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25181932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档