I can find 10^1000 examples of scripting Excel using Ruby, but I can't for the life of me figure out how to have Ruby react to events in Excel. I'm trying retrieve the contents of a row in a worksheet when it's selected, but such an event-based retrieval I can't find any methods or examples for.
+1
A:
Use the *WIN32OLE_EVENT.new* method to create an OLE Event object, then call its *on_event* method. Call the *WIN32OLE_EVENT.message_loop* method to launch the event-monitoring loop.
Here's an example that prints out the selected range's value, then halts event monitoring before the workbook is saved:
require 'win32ole'
def exit_event_loop
$LOOP = false
end
xl = WIN32OLE.connect('Excel.Application')
wb = xl.ActiveWorkbook
ev = WIN32OLE_EVENT.new(wb, 'WorkbookEvents')
ev.on_event('SheetSelectionChange') do
range = xl.Selection
puts(range.Value)
STDOUT.flush
end
ev.on_event('BeforeSave') do
exit_event_loop
end
$LOOP = true
while $LOOP
WIN32OLE_EVENT.message_loop
sleep 0.1
end
Hope that helps.
David Mullet
2009-05-08 16:01:26