首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“未找到成员。”使用win32com时出错

“未找到成员。”使用win32com时出错
EN

Stack Overflow用户
提问于 2012-11-06 02:39:59
回答 1查看 3.6K关注 0票数 1

我在使用Python模块访问COM对象时遇到了问题,这是使用win32com时所没有的。请参阅下面的用法/错误。该对象的其他部分运行正常,但我无法从ResultSet对象中获取任何参数。

代码语言:javascript
复制
>>> import win32com.client
>>> Aquator = win32com.client.gencache.EnsureDispatch("Aquator.Application")
>>> db = Aquator.LoadDatabase(r"D:\Shared", "AquatorExcel.mdb")
>>> project = Aquator.LoadProject(db, "A simple model", False, False)
>>>
>>> project.ModelRunStart()
<win32com.gen_py.Aquator Water Resource Simulation._ModelRun instance at 0x15264
824>
>>> Aquator.ActiveProject.ModelRuns.Count
1
>>> Aquator.ActiveProject.ModelRuns.Item(1).ResultSet
<win32com.gen_py.Aquator Water Resource Simulation._IResultSet instance at 0x149
19000>
>>> Aquator.ActiveProject.ModelRuns.Item(1).ResultSet.Cost
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Pythonxy\Pythonxy 2.7\Python27\lib\site-packages\win32c
om\client\__init__.py", line 463, in __getattr__
    return self._ApplyTypes_(*args)
  File "C:\Program Files\Pythonxy\Pythonxy 2.7\Python27\lib\site-packages\win32c
om\client\__init__.py", line 456, in _ApplyTypes_
    self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147352573, 'Member not found.', None, None)

应用程序中的VBA编辑器中的等效代码可以正常工作,并返回一个浮点数:

代码语言:javascript
复制
Public Sub Test()
    MsgBox Aquator.ActiveProject.ModelRuns.Item(1).ResultSet.Cost
End Sub

据我所知,EnsureDispatch命令已经正确地完成了它的工作,并且能够识别该属性(以及其他属性,也无法访问):

代码语言:javascript
复制
>>> Aquator.ActiveProject.ModelRuns.Item(1).ResultSet._prop_map_get_.keys()
['WaterBalanceMl', 'RunDate', 'Parameters', 'DoublePrecision', 'WarningCount', '
FinishDate', 'AmountLost', 'SinglePrecision', 'Status', 'StartDate', 'Descriptio
n', 'AmountLeaked', 'FailureCount', 'AmountAdded', 'ErrorCount', 'AmountStored',
 'Name', 'WaterBalancePercent', 'InfoValueList', 'Results', 'States', 'Cost', 'A
mountRemoved', 'Sequences', 'Duration', 'InfoNameList', 'RunTime']
>>> Aquator.ActiveProject.ModelRuns.Item(1).ResultSet.meh
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Pythonxy\Pythonxy 2.7\Python27\lib\site-packages\win32c
om\client\__init__.py", line 462, in __getattr__
    raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr
))
AttributeError: '<win32com.gen_py.Aquator Water Resource Simulation._IResultSet
instance at 0x15175888>' object has no attribute 'meh'

我尝试过使用.GetCost() (就像Setting a property using win32com一样),但没有用(“对象没有属性...”)。

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-07 22:27:56

似乎问题出在win32com模块上。使用comtypes模块的等价代码可以正确运行:

代码语言:javascript
复制
>>> from comtypes.client import CreateObject
>>> Aquator = CreateObject("Aquator.Application")
>>> Database = Aquator.LoadDatabase(r"D:\Shared", "AquatorExcel.mdb")
>>> Project = Aquator.LoadProject(Database, "A simple project", False, False)
>>> ModelRun = Project.ModelRunStart()
>>> print ModelRun.ResultSet.Cost
133432.20
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13238269

复制
相关文章

相似问题

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