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