RoadMovie

write down memos or something I found about tech things

Rubyでxls(Excelファイル)を簡単にパースする方法

すごく簡単でドキュメント通りな内容なのですが、非常に便利だったのでメモ。

その名もSpreadsheetというgemを使います。 https://github.com/zdavatz/spreadsheet/blob/master/GUIDE.md

# Gemfile
gem 'spreadsheet'
# vim hoge.rb
Spreadsheet.client_encoding = 'UTF-8'

book = Spreadsheet.open '/path/to/an/excel-file.xls'
sheet1 = book.worksheet 0 # スプレッドシートの1枚目を指定

sheet1.each do |row|
  # do something interesting with a row
end

たったこれだけです!超簡単! 配列でrowの部分にデータが入ってくるので扱いやすくてよいです。

スプレッドシートの指定の仕方はindexで指定しているのですが(なので2枚目だと1を指定すればよいです)、シート名をそのまま書いても大丈夫なようです。(ex. sheet1 = book.worksheet 'Sheet1')

また、Spreadsheet.open部分はRailsの場合だとexpand_pathとか使えなくてめんどくさそうと思ったのですが、普通にアプリルートからのパスで通りました。

なのでbatchスクリプト内で実行する際は

book = Spreadsheet.open 'bin/batch/excel-file.xls'

などと書いておいて、コンソールから

$ rails r bin/batch/hoge.rb

で大丈夫です。