Ruby標準のCSVライブラリのように、一枚のシートだけからなるXLSXファイルを読み書きするためのもの。
http://rubygems.org/gems/single_xlsx
使い方
読み
配列の配列で取得する。
Name | Age |
---|---|
Einstein | 76 |
Feynman | 69 |
SingleXLSX.read("path/to/xlsx") #=> [ ["Name", "Age"], ["Einstein", 76], ["Feynman", 69] ]
いつかヘッダ名で取得できるようにしたい。
書き
バイナリとして取り出す。
binary = SingleXLSX.generate do |sheet| sheet << ["Name", "Age"] sheet << ["Einstein", 76] sheet << ["Feynman", 69] end
ファイルに書き出す。
SingleXLSX.open("path/to/xlsx") do |sheet| sheet << ["Name", "Age"] sheet << ["Einstein", 76] sheet << ["Feynman", 69] end
裏側
XLSXの実際の処理はrubyXLを使っていて、SingleXLSXはそれをCSVっぽいインターフェースでくるんだだけのラッパーに過ぎない。
だからrubyXLにできることは上でいうsheet
をいじれば大方できるし、できないことはできない。もしグラフを描きたいならAxlsxが便利だろうし、多種多様なスプレッドシートを統一的に扱いたいならRooを使うといい。
CSVっぽく手軽にXLSXを扱えることを目指してる(とはいえバイナリだから不便な面はあるけど。diffが簡単に取れないとか)。
経緯
今まではデータ投入用にShift_JISのCSVをExcelで扱うことが多かったんだけど、Shift_JISに収まらない文字を扱う必要が出てきて、とはいえExcelはUTF-8なCSVの手軽な取り扱いができないのでXLSXで扱うことが増えてきた。
RubyでXLSXを読み書きできるライブラリとしてはrubyXLが十分実用的で今も継続的に作者がコミットしてくれているんだけど、どうせ1枚のシートしか扱わないならCSVと似たI/Fがいいなあと思って作った。