Win32OLE Q & A

更新日:2002-04-08
[インデックスへ]

名前つき引数

Q. 名前つき引数は使えますか?

A. Hash を利用することで名前つき引数に似たようなことを実現できます。

excel = WIN32OLE.new('Excel.Application')
excel.visible = true
book = excel.Workbooks.Add
sheet1 = book.Worksheets(1)
book.Worksheets.Add({'Before'=>sheet1, 'Count' => 2}) # 引数にHashを指定

すべての引数をHashで指定する必要はなく、普通の引数とHashを組合せることもできます。 ただし、Hashで指定できるのは最後の引数だけです。 例えば、上の例は、次のように書くこともできます。

book.Worksheets.Add(sheet1, {'Count' => 2})

引数の省略

Q. 途中の引数を省略して "Call Worksheets.Add(, sheet1)" のように書くことはできますか?

A. できません。

Worksheets.Add(nil, sheet1)

とするか

Worksheets.Add({'After' => sheet1})

としてください。

もちろん、第1引数だけ指定して残りの引数を省略することはできます。

引数つきプロパティ

Q. 引数つきプロパティの設定はどのようにすればいいのでしょうか?

A. WIN32OLE#setproperty メソッドを利用してください。

chart.HasAxis(1, 1) = true

と書くことはできないので、

chart.setproperty('HasAxis', 1, 1, true)

のようにしてください。

ちょっと面倒ですが、次のような方法もあります。

require 'oleproperty'

module OLE_Chart
  def HasAxis
    OLEProperty.new(self, 52, [VT_VARIANT, VT_VARIANT], [VT_VARIANT, VT_VARIANT, VT_VARIANT])
  end
end

chart.extend(OLE_Chart)
chart.HasAxis[1, 1] = true

OLE_Chartは、olegen.rb を使用すれば、次のようにして得ることができます。

ruby olegen.rb 'Microsoft Excel 9.0 Object Library' > excel.rb

[in, out] の引数

Q. メソッドを呼び出したあと、引数([in,out])の値が変化しませんでした。

A. 引数の結果は、WIN32OLE::ARGV にセットされます。WIN32OLE::ARGV を利用してください。

obj = WIN32OLE.new(...)
arg1 = 1
obj.method(arg1)

puts WIN32OLE.ARGV[0]

[インデックスへ]