Hatena::ブログ(Diary)

Tosikの雑記 このページをアンテナに追加 RSSフィード Twitter

2010-09-13

ruby の win32ole のメソッド名が UpperCamelCase で気持ち悪いので、underscore で使えるようにした

お仕事でエクセルのデータを変換する必要があって、でも VBA は勘弁して欲しいと思ってなんとかできないかなと思ってたら、ruby で COM を操作するライブラリがあるじゃないですか!

ところが、この ruby の win32ole はメソッド名が COM のまま。COM のメソッド命名規則的には UpperCamelCase らしいけど、ruby でそれは気持ち悪い。というわけで、ruby の win32ole のメソッドを underscore で使えるようにした

require 'win32ole'
require 'active_support/inflector'

class WIN32OLE
  alias_method :old_method_missing, :method_missing
  def method_missing(name, *args, &block)
    begin
      old_method_missing(name.to_s.camelize(:upper), *args, &block)
    rescue NameError
      old_method_missing(name, *args, &block)
    end
  end
end

# trial
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.workbooks.add()
worksheet = workbook.worksheets(1)
worksheet.range('A1:D1').value = ['North','South','East','West']
puts worksheet.used_range.rows.extend(Enumerable).map {|row|
  row.columns.extend(Enumerable).map {|column| column.value }.join(",")
}

どうでしょうか。ちなみに、active_support/inflector は camelize しか使ってないので、active_support を使わない場合は適当に置き換えてください。

トラックバック - http://d.hatena.ne.jp/tosik/20100913/1284343510