win32ole

梅雨の合間をぬってあしかがフラーパークへ、行ってきた。 今は紫陽花と花菖蒲の季節。雨上がりに映えて綺麗だったよ。鎌倉へ人を見に行くよりも 近くて空いてて、のんびり出来て、最高だったよ。 それに園内にあるレストランで、冷やしスパゲッティーなるものを生まれて初めて体験した。 トマトとズッキーニとオリーブの実がたっぷりと入っていて、お腹も充実しました。

このパークは、世界一?の藤で有名だけど、このシーズンを外すと、入園料のお徳になったり お土産(花の鉢植え)まで、プレゼント(但し、チラシ持参の方のみ)してくれたりで、 充実してました。

win32ole

久野先生の教科書を読み始めたのだが、硬い(先生独特の柔らかい所も散見されますが)のに ちょいと疲れてしまったので、第一次Rubyブームの時に出版された、 Rubyを256倍使う本 シリーズで、息抜きしてる。

眼に止まったのが、arton さんが書かれた、邪道編。そうですか、Windowsでrubyを邪道に 使っちゃえですか。 今でこそ、LLは普通にWindowsで動くけど、それまでは、土台はUnix が標準だものなあ。輪をかけて、ただ動かすだけじゃなく、Win系のアプリをこき使っちゃえ となるから、邪道以外の言い様はないだろう。

読んでいるうちに、私も邪道したくなった。ちょいと遊ぶのだから、写経する気にもならない。 そこで、るびまですよ。7回シリーズになっていて、サンプルが落とせるのがありがたい。

Win32OLE 活用法 【第 1 回】 Win32OLE ことはじめ

Win32OLE 活用法 【第 2 回】 Excel

一回目で、OLEとは何ぞやを知り、二回目で、EXCELをこき使おうと言う算段。 私も早速やってみた。(コピペしただけですが) 題材は、前にも書いたけど、血圧とかのデータを、毎月1シートにして記録してるEXCELファイルだ。 本当は、EXCELなんかで記録したくは無かったのだけど、データを登録する時、フォームを 利用出来ると言う利点のみで、日寄ってしまったのだ。 データが溜まるにつれ、データのポータビリティーどうしようと、考えていたので、これは 渡りに船だ。

require 'win32ole'

myfile = "bp2009.xls"

def getAbsolutePath( filename )
  fso = WIN32OLE.new('Scripting.FileSystemObject')
  return fso.GetAbsolutePathName(filename)
end

xl = WIN32OLE.new('Excel.Application')
filename = getAbsolutePath(myfile)

book = xl.Workbooks.Open(filename)
begin
  book.Worksheets.each do |sheet|
    puts "=== " + sheet.Name + " ==="
    sheet.UsedRange.Rows.each do |row|
      record = []
      row.Columns.each do |cell|
        record << cell.Value
      end
      p record
      #puts record.join(",")
    end
  end
ensure
  book.Close
  xl.Quit
end

何も考えずに実行してみると ...

c:\sakae\WinOLE>ruby excel1.rb >mylog
c:\sakae\WinOLE>more mylog
=== 0901 ===
["Date", "Hr", "Walk", "Lh", "Ll", "Lp", "Rh", "Rl", "Rp"]
[5.0, 22.0, 0.0, 134.0, 83.0, 73.0, 140.0, 86.0, 72.0]
 ....
=== 0906 ===
 ....
[15.0, 22.0, 5736.0, 113.0, 80.0, 69.0, 104.0, 75.0, 71.0]

当初は、歩数を記録してなかった。この際だから、歩数の記録が無いシートに、歩数の 欄を設けて、全シートの欄を統一しちゃった。こうすれば、スクリプトも簡単になるし 楽で良い。ここまで、出来れば後は簡単だ。実数表示は整数に直そう。 最左列は、日なので、シート名と組み合わせて、y/m/d にするか。まてよ、その右欄は 時間なので、これも日に編入させちゃえ。

たったこれだけのスクリプトで、EXCELを操れるなら、EXCELはデータの入力装置に格下げ だな。上記のURLで、いろいろとM$のリンクが示されているけど、結構リンク切れとなって いる。M$って、一体何考えているのよ。

そうか、ユーザーをクリック猿に教育してるんで、資料なんてどうでもいいと整理しちゃって るのね。くわばら、くわばら。

他の言語からは

Win32OLE 活用法 【第 7 回】 ほかの言語での COM も、非常に興味深いです。

昔、同僚がEXCELをVBから操って、処理をしてたのを横目で眺めていました。その時は、 VBでしか操れないと思ってました。VBなんて、BASICの成れの果てで、使うに 値しない言語と思っていたのです。だから、あえて、勉強する気も起きずにいました。

でも、こうして、M$を手足のように使える切り口を用意してるのを知った今、すこしは見直し ましたよ。

中でも気になったのが、F#でも 使えますよ、と言う一言。パパァと反応しそうで怖い、自分が居ます。

最近は、 F#、IronPython、Booまで使えるフリーの統合開発環境 と言うのもあるみたいですし。。。