Ruby で xlsx を編集する

Ruby で既存のエクセルファイルを編集したかったので試してみた。
Ruby でエクセルファイルを扱う手段(gem)はいくつかあるが今回は、

  • .xlsx ファイルの読み込み
  • .xlsx ファイルの書き込み
  • セルの結合

を行いたかったので RubyXL を使うことにした。

余談

最初は spreadsheet を使おうと思って試してみたが、これは .xls.xlsx ではない)しか読み書きが出来ないのでボツに。
次に .xlsx が読み込める roo を試してみたが、これも .xlsx の読み込みはできるけど、書き込みが出来ないのでやっぱりボツに。
また axlsx も使い勝手とかはよさそうだったが、これはファイルの読み込み自体が行えずに(ry。
このように Rubyge でエクセルを扱う gem はいくつか存在するが、全体的にかゆいところに手が届かない。
と、いうような問題を解決するためにエクセルを扱う gem の機能を共有した rrxcell というものが存在しており、これであれば .xlsx の読み書きを行うことが出来る。
しかし、残念ながら rrxcell では『セルの結合』を行うことが出来なかったのであえなく撃沈した。
そういうわけで、今回は全ての条件を満たす RubyXL を使うことにした。

インストール

$ gem install rubyXL

使い方

require "rubyXL"

src  = "test.xlsx"
dest = "output.xlsx"

# エクセルファイルの読み込み
book = RubyXL::Parser.parse(src)

# シートを取得
sheet = book[0]


# シートのセルを結合する

# 行3, 列 0 のセル位置
cell1 = [3, 0]
# 行3, 列 1 のセル位置
cell2 = [3, 1]

# cell1 と cell2 を結合する
sheet.merge_cells *cell1, *cell2
# 以下と等価
# sheet.merge_cells 3, 0, 3, 1

# ファイルの保存
book.write(dest)

所感

とりあえず、やりたかったことは出来たので満足。

参照