Excel ファイルの内容を Ruby を使って高速取得する

Rails には直接関係ない小ネタをひとつ。

Excel の中身を Ruby のプログラムから参照したいことがある。これは、次のように実現できる。win32/clipboard と win32ole という2つのライブラリを使う。

require 'rubygems'
require "win32/clipboard"
require 'win32ole'

excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false

excel.workbooks.open 'filename' => 'C:\test1.xls'
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
sheet.select
excel.cells.select
excel.selection.copy

s = Win32::Clipboard.data

excel.quit

puts s
#=> C:\test1.xls の最初のシートの中身が出力される。

単にシート全体をクリップボードにコピーし、その内容を取得しているだけ。どのように出力されるかというと、

  | A    B
-----------
1 | a    b
2 | c    d

という Excel シートの場合は、

a\tb\r\n
c\t\d\r\n

となる。改行コードが \r\n で区切り文字がタブというわけだ。

注意

もしなければ win32-clipboard という gem をあらかじめ入れておくこと。

% gem install win32-clipboard