tags:

views:

193

answers:

1

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