Over at Stack Overflow, a member asked a couple questions regarding working with WIN32OLE objects.
Q1: How do I determine the class name of an OLE object instance?
The code:
object.ole_obj_help.name
The explanation:
Calling the ole_obj_help method on a WIN32OLE object returns a WIN32OLE_TYPE object. The WIN32OLE_TYPE object includes a name attribute. Calling this on an Excel application object...
xl = WIN32OLE.new( 'Excel.Application' )
xl.ole_obj_help.name
...returns the string '_Application', while calling it on a Worksheet object...
xl.ActiveSheet.ole_obj_help.name
...returns the string '_Worksheet'.
Q2: How can I tell whether an object instance supports a particular method?
The code:
object.ole_methods.collect!{ |x| x.to_s }.include?( 'MethodName' )
The explanation:
As mentioned previously here, calling the ole_methods method on a WIN32OLE object returns an array of WIN32OLE objects that represent methods that can be called on that object. You can convert each object in the array to a string, using the collect! method. Then it's a simple matter to call the include? method to see if the resulting array of strings contains a certain value.
And so we can use this to find that the Excel application object includes a Quit method...
xl.ole_methods.collect!{ |x| x.to_s }.include?( 'Quit' )
=> true
...but does not include a Close method:
xl.ole_methods.collect!{ |x| x.to_s }.include?( 'Close' )
=> false
There you have it. Thanks for stopping by!