2012-11-05 80 views
1

我在使用Python win32com模塊訪問COM對象時遇到問題,這在使用VBA時沒有。請參閱下面的用法/錯誤。對象的其他部分功能正常,但我無法從ResultSet對象中獲取任何參數。」找不到會員。「使用win32com時出錯

>>> 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編輯正確的等效代碼,返回一個float:

Public Sub Test() 
    MsgBox Aquator.ActiveProject.ModelRuns.Item(1).ResultSet.Cost 
End Sub 

據我所知道的,EnsureDispatch命令已經做了正確的工作,並認識到財產(與人相處,也無法訪問):

>>> 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)試過了,沒有用(「對象有沒有屬性.. 「)。

我在這裏做錯了什麼?

回答

0

看來問題在於win32com模塊。使用comtypes模塊的equivilent代碼正常工作:

>>> 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 
相關問題