WIN32OLE_EVENTメモ
WIN32OLE_EVENTを使ってExcelのイベントにコールバックを登録する例を作ってみた。
require 'win32ole' app = WIN32OLE.new('Excel.Application') app.visible = true wkb = app.workbooks.add i = 100 WIN32OLE_EVENT.new(wkb, 'WorkbookEvents').on_event() do |*e| i = i - 1 p(e.map do |a| WIN32OLE === a ? a.ole_obj_help : a end) end WIN32OLE_EVENT.message_loop while i > 0
疑問:コールバックを削除する方法がわからなかった。
WIN32OLE_TYPEメモ
WIN32OLE_TYPE.typelibs
タイプライブラリ一覧を文字列の配列で取得。
puts WIN32OLE_TYPE.typelibs.grep(/PowerPoint/) # => Microsoft PowerPoint 9.0 Object Library Microsoft PowerPoint 12.0 Object Library
WIN32OLE_TYPE.ole_classes(typelib)
指定したtypelibのクラス一覧を配列で取得。
tl = WIN32OLE_TYPE.typelibs.grep(/PowerPoint/)[1] puts WIN32OLE_TYPE.ole_classes(tl).map { |c| c.to_s }.grep(/Shape/) # => Shapes Shape ShapeRange GroupShapes ShapeNodes ShapeNode PpShapeFormat CanvasShapes
WIN32OLE_TYPE#variables
OLEクラスのインスタンスに定義された変数の配列を取得する。実際には、定数一覧が得られるようだ。
WIN32OLE_TYPE.ole_classes(tl).map { |c| c.to_s }.grep(/Slide/).each do |c| va = WIN32OLE_TYPE.new(tl, c.to_s).variables pp [c, va] unless va.empty? end