@@ -23,6 +23,23 @@ class XLPythonObject(object):
2323 _public_methods_ = []
2424 def __init__ (self , obj ):
2525 self .obj = obj
26+
27+ class XLPythonIterator (object ):
28+ _public_methods_ = [ "MoveNext" , "Current" ]
29+
30+ def __init__ (self , obj ):
31+ self .iter = obj .__iter__ ()
32+ self .current = None
33+
34+ def MoveNext (self ):
35+ try :
36+ self .current = self .iter .next ()
37+ return True
38+ except StopIteration :
39+ return False
40+
41+ def Current (self ):
42+ return ToVariant (self .current )
2643
2744def FromVariant (var ):
2845 try :
@@ -34,7 +51,7 @@ def ToVariant(obj):
3451 return win32com .server .util .wrap (XLPythonObject (obj ))
3552
3653class XLPython (object ):
37- _public_methods_ = [ 'Module' , 'Tuple' , 'Dict' , 'List' , 'Obj' , 'Str' , 'Var' , 'Call' , 'GetItem' , 'SetItem' , 'GetAttr' , 'SetAttr' , 'Eval' , 'Exec' , 'ShowConsole' , 'Reload' , 'AddPath' ]
54+ _public_methods_ = [ 'Module' , 'Tuple' , 'Dict' , 'List' , 'Obj' , 'Str' , 'Var' , 'Call' , 'GetItem' , 'SetItem' , 'GetAttr' , 'SetAttr' , 'HasAttr' , ' Eval' , 'Exec' , 'ShowConsole' , 'Reload' , 'AddPath' , 'Builtins' , 'Len' , 'GetIter ' ]
3855
3956 def ShowConsole (self ):
4057 import ctypes
@@ -117,6 +134,14 @@ def Call(self, obj, *args):
117134 else :
118135 return ToVariant (getattr (obj , method )(* pargs , ** kwargs ))
119136
137+ def Len (self , obj ):
138+ obj = FromVariant (obj )
139+ return len (obj )
140+
141+ def Builtins (self ):
142+ import __builtin__
143+ return ToVariant (__builtin__ )
144+
120145 def GetItem (self , obj , key ):
121146 obj = FromVariant (obj )
122147 key = FromVariant (key )
@@ -139,6 +164,15 @@ def SetAttr(self, obj, attr, value):
139164 value = FromVariant (value )
140165 setattr (obj , attr , value )
141166
167+ def HasAttr (self , obj , attr ):
168+ obj = FromVariant (obj )
169+ attr = FromVariant (attr )
170+ return hasattr (obj , attr )
171+
172+ def GetIter (self , obj ):
173+ obj = FromVariant (obj )
174+ return win32com .server .util .wrap (XLPythonIterator (obj ))
175+
142176 def Eval (self , expr , * args ):
143177 globals = None
144178 locals = None
0 commit comments