Ruby Office Automation - не удается заставить обработчики событий работать в MSWord - PullRequest
1 голос
/ 07 сентября 2010

Ruby версия 1.9.1p430, работающая на W7 с Office 2010.

Я пытаюсь поймать событие DocumentBeforeClose, но даже не могу приблизиться, чтобы заставить его работать!

Я следовал некоторым примерам, используя Excel, где обрабатывается SheetSelectionChange. Работает без проблем.

Используя тот же процесс, я хотел обработать указанное выше событие Word.

Мой код не выполняется в операторе WIN32OLE_EVENT.new. Вот что я использую:

require 'win32ole'

wd = WIN32OLE.connect('Word.Application')
wd.visible = true
doc = wd.Documents.Add

ev = WIN32OLE_EVENT.new(doc, 'ApplicationEvents4')

Я получаю ошибку:

ev = WIN32OLE_EVENT.new(doc, 'ApplicationEvents4')
RuntimeError: failed to query IConnectionPoint
    HRESULT error code:0x80040200

Я тщательно искал правильное содержание для названия раковины в операторе WIN32OLD_EVENT, но это лучшее, что я придумал, и оно явно неверно!

Я был бы очень признателен, если бы кто-то указал мне правильное направление. Мне было бы интересно узнать, удалось ли кому-нибудь успешно обработать события Word из Ruby.

1 Ответ

1 голос
/ 07 сентября 2010

Я думаю, что вы должны использовать объект Word вместо объекта doc в вызове WIN32OLE_EVENT, поскольку ApplicationEvents4 относится к Word.Application.

ev = WIN32OLE_EVENT.new(wd, 'ApplicationEvents4')

PS
Не забудьте про цикл сообщений

loop do
    WIN32OLE_EVENT.message_loop
end
...