win32ole
梅雨の合間をぬってあしかがフラーパークへ、行ってきた。 今は紫陽花と花菖蒲の季節。雨上がりに映えて綺麗だったよ。鎌倉へ人を見に行くよりも 近くて空いてて、のんびり出来て、最高だったよ。 それに園内にあるレストランで、冷やしスパゲッティーなるものを生まれて初めて体験した。 トマトとズッキーニとオリーブの実がたっぷりと入っていて、お腹も充実しました。
このパークは、世界一?の藤で有名だけど、このシーズンを外すと、入園料のお徳になったり お土産(花の鉢植え)まで、プレゼント(但し、チラシ持参の方のみ)してくれたりで、 充実してました。
win32ole
久野先生の教科書を読み始めたのだが、硬い(先生独特の柔らかい所も散見されますが)のに ちょいと疲れてしまったので、第一次Rubyブームの時に出版された、 Rubyを256倍使う本 シリーズで、息抜きしてる。
眼に止まったのが、arton さんが書かれた、邪道編。そうですか、Windowsでrubyを邪道に 使っちゃえですか。 今でこそ、LLは普通にWindowsで動くけど、それまでは、土台はUnix が標準だものなあ。輪をかけて、ただ動かすだけじゃなく、Win系のアプリをこき使っちゃえ となるから、邪道以外の言い様はないだろう。
読んでいるうちに、私も邪道したくなった。ちょいと遊ぶのだから、写経する気にもならない。 そこで、るびまですよ。7回シリーズになっていて、サンプルが落とせるのがありがたい。
Win32OLE 活用法 【第 1 回】 Win32OLE ことはじめ
一回目で、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まで使えるフリーの統合開発環境 と言うのもあるみたいですし。。。