イベントインターフェースを取得する

このようなイベントの インタフェース名を調べるには一種のノウハウが必要です。
イベントのインタフェース名を調べる方法について ruby-list:39137 で、arton さんが書かれた方法が非常に参考になります。簡単な方法は助田さんが作成された Simple OLE Browser や Python Object Browser を用いることでしょう。

MSDNを調べろって言われても慣れてないとなかなか正解にたどり着かないのがMSDN。オンラインだとストレスがたまりやすくてあきらめることが多いのよね。ということで、作ってみた。

require 'win32ole'

tl = 'Microsoft Excel 9.0 Object Library'

ole_classes = WIN32OLE_TYPE.ole_classes(tl)
ole_classes.each do |c|
  begin
    methods = WIN32OLE_TYPE.new(tl, c.to_s).ole_methods
    methods.each do |m|
      p [c, m.event_interface, m] if m.event?
    end
  rescue
  end
end

tlのところは各自環境に合わせて適当に。

追記:http://msdn.microsoft.com/library/en-us/dno2kta/html/offaut.asp

以下、実行結果

[QueryTable, "_QueryTable", QueryInterface]
[QueryTable, "_QueryTable", AddRef]
[QueryTable, "_QueryTable", Release]
[QueryTable, "_QueryTable", GetTypeInfoCount]
[QueryTable, "_QueryTable", GetTypeInfo]
[QueryTable, "_QueryTable", GetIDsOfNames]
[QueryTable, "_QueryTable", Invoke]
[QueryTable, "RefreshEvents", QueryInterface]
[QueryTable, "RefreshEvents", AddRef]
[QueryTable, "RefreshEvents", Release]
[QueryTable, "RefreshEvents", GetTypeInfoCount]
[QueryTable, "RefreshEvents", GetTypeInfo]
[QueryTable, "RefreshEvents", GetIDsOfNames]
[QueryTable, "RefreshEvents", Invoke]
[QueryTable, "RefreshEvents", BeforeRefresh]
[QueryTable, "RefreshEvents", AfterRefresh]
[Application, "_Application", QueryInterface]
[Application, "_Application", AddRef]
[Application, "_Application", Release]
[Application, "_Application", GetTypeInfoCount]
[Application, "_Application", GetTypeInfo]
[Application, "_Application", GetIDsOfNames]
[Application, "_Application", Invoke]
[Application, "AppEvents", QueryInterface]
[Application, "AppEvents", AddRef]
[Application, "AppEvents", Release]
[Application, "AppEvents", GetTypeInfoCount]
[Application, "AppEvents", GetTypeInfo]
[Application, "AppEvents", GetIDsOfNames]
[Application, "AppEvents", Invoke]
[Application, "AppEvents", NewWorkbook]
[Application, "AppEvents", SheetSelectionChange]
[Application, "AppEvents", SheetBeforeDoubleClick]
[Application, "AppEvents", SheetBeforeRightClick]
[Application, "AppEvents", SheetActivate]
[Application, "AppEvents", SheetDeactivate]
[Application, "AppEvents", SheetCalculate]
[Application, "AppEvents", SheetChange]
[Application, "AppEvents", WorkbookOpen]
[Application, "AppEvents", WorkbookActivate]
[Application, "AppEvents", WorkbookDeactivate]
[Application, "AppEvents", WorkbookBeforeClose]
[Application, "AppEvents", WorkbookBeforeSave]
[Application, "AppEvents", WorkbookBeforePrint]
[Application, "AppEvents", WorkbookNewSheet]
[Application, "AppEvents", WorkbookAddinInstall]
[Application, "AppEvents", WorkbookAddinUninstall]
[Application, "AppEvents", WindowResize]
[Application, "AppEvents", WindowActivate]
[Application, "AppEvents", WindowDeactivate]
[Application, "AppEvents", SheetFollowHyperlink]
[Chart, "_Chart", QueryInterface]
[Chart, "_Chart", AddRef]
[Chart, "_Chart", Release]
[Chart, "_Chart", GetTypeInfoCount]
[Chart, "_Chart", GetTypeInfo]
[Chart, "_Chart", GetIDsOfNames]
[Chart, "_Chart", Invoke]
[Chart, "ChartEvents", QueryInterface]
[Chart, "ChartEvents", AddRef]
[Chart, "ChartEvents", Release]
[Chart, "ChartEvents", GetTypeInfoCount]
[Chart, "ChartEvents", GetTypeInfo]
[Chart, "ChartEvents", GetIDsOfNames]
[Chart, "ChartEvents", Invoke]
[Chart, "ChartEvents", Activate]
[Chart, "ChartEvents", Deactivate]
[Chart, "ChartEvents", Resize]
[Chart, "ChartEvents", MouseDown]
[Chart, "ChartEvents", MouseUp]
[Chart, "ChartEvents", MouseMove]
[Chart, "ChartEvents", BeforeRightClick]
[Chart, "ChartEvents", DragPlot]
[Chart, "ChartEvents", DragOver]
[Chart, "ChartEvents", BeforeDoubleClick]
[Chart, "ChartEvents", Select]
[Chart, "ChartEvents", SeriesChange]
[Chart, "ChartEvents", Calculate]
[Worksheet, "_Worksheet", QueryInterface]
[Worksheet, "_Worksheet", AddRef]
[Worksheet, "_Worksheet", Release]
[Worksheet, "_Worksheet", GetTypeInfoCount]
[Worksheet, "_Worksheet", GetTypeInfo]
[Worksheet, "_Worksheet", GetIDsOfNames]
[Worksheet, "_Worksheet", Invoke]
[Worksheet, "_Worksheet", Activate]
[Worksheet, "DocEvents", QueryInterface]
[Worksheet, "DocEvents", AddRef]
[Worksheet, "DocEvents", Release]
[Worksheet, "DocEvents", GetTypeInfoCount]
[Worksheet, "DocEvents", GetTypeInfo]
[Worksheet, "DocEvents", GetIDsOfNames]
[Worksheet, "DocEvents", Invoke]
[Worksheet, "DocEvents", SelectionChange]
[Worksheet, "DocEvents", BeforeDoubleClick]
[Worksheet, "DocEvents", BeforeRightClick]
[Worksheet, "DocEvents", Activate]
[Worksheet, "DocEvents", Deactivate]
[Worksheet, "DocEvents", Calculate]
[Worksheet, "DocEvents", Change]
[Worksheet, "DocEvents", FollowHyperlink]
[Workbook, "_Workbook", QueryInterface]
[Workbook, "_Workbook", AddRef]
[Workbook, "_Workbook", Release]
[Workbook, "_Workbook", GetTypeInfoCount]
[Workbook, "_Workbook", GetTypeInfo]
[Workbook, "_Workbook", GetIDsOfNames]
[Workbook, "_Workbook", Invoke]
[Workbook, "WorkbookEvents", QueryInterface]
[Workbook, "WorkbookEvents", AddRef]
[Workbook, "WorkbookEvents", Release]
[Workbook, "WorkbookEvents", GetTypeInfoCount]
[Workbook, "WorkbookEvents", GetTypeInfo]
[Workbook, "WorkbookEvents", GetIDsOfNames]
[Workbook, "WorkbookEvents", Invoke]
[Workbook, "WorkbookEvents", Open]
[Workbook, "WorkbookEvents", Activate]
[Workbook, "WorkbookEvents", Deactivate]
[Workbook, "WorkbookEvents", BeforeClose]
[Workbook, "WorkbookEvents", BeforeSave]
[Workbook, "WorkbookEvents", BeforePrint]
[Workbook, "WorkbookEvents", NewSheet]
[Workbook, "WorkbookEvents", AddinInstall]
[Workbook, "WorkbookEvents", AddinUninstall]
[Workbook, "WorkbookEvents", WindowResize]
[Workbook, "WorkbookEvents", WindowActivate]
[Workbook, "WorkbookEvents", WindowDeactivate]
[Workbook, "WorkbookEvents", SheetSelectionChange]
[Workbook, "WorkbookEvents", SheetBeforeDoubleClick]
[Workbook, "WorkbookEvents", SheetBeforeRightClick]
[Workbook, "WorkbookEvents", SheetActivate]
[Workbook, "WorkbookEvents", SheetDeactivate]
[Workbook, "WorkbookEvents", SheetCalculate]
[Workbook, "WorkbookEvents", SheetChange]
[Workbook, "WorkbookEvents", SheetFollowHyperlink]
[OLEObject, "_OLEObject", QueryInterface]
[OLEObject, "_OLEObject", AddRef]
[OLEObject, "_OLEObject", Release]
[OLEObject, "_OLEObject", GetTypeInfoCount]
[OLEObject, "_OLEObject", GetTypeInfo]
[OLEObject, "_OLEObject", GetIDsOfNames]
[OLEObject, "_OLEObject", Invoke]
[OLEObject, "OLEObjectEvents", QueryInterface]
[OLEObject, "OLEObjectEvents", AddRef]
[OLEObject, "OLEObjectEvents", Release]
[OLEObject, "OLEObjectEvents", GetTypeInfoCount]
[OLEObject, "OLEObjectEvents", GetTypeInfo]
[OLEObject, "OLEObjectEvents", GetIDsOfNames]
[OLEObject, "OLEObjectEvents", Invoke]
[OLEObject, "OLEObjectEvents", GotFocus]
[OLEObject, "OLEObjectEvents", LostFocus]