There's an echo in my head

日々のメモ。

SingleXLSXというgemをリリースした

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_JISCSVExcelで扱うことが多かったんだけど、Shift_JISに収まらない文字を扱う必要が出てきて、とはいえExcelUTF-8CSVの手軽な取り扱いができないのでXLSXで扱うことが増えてきた。

RubyでXLSXを読み書きできるライブラリとしてはrubyXLが十分実用的で今も継続的に作者がコミットしてくれているんだけど、どうせ1枚のシートしか扱わないならCSVと似たI/Fがいいなあと思って作った。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。