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
Q. メソッドを呼び出したあと、引数([in,out])の値が変化しませんでした。
A. 引数の結果は、WIN32OLE::ARGV にセットされます。WIN32OLE::ARGV を利用してください。
obj = WIN32OLE.new(...) arg1 = 1 obj.method(arg1) puts WIN32OLE.ARGV[0]