個人的に、といっても会社用のツールだけれど、Excelファイルを作る機能が必要だったのでそういう機能をAxlsxを使って作っていました。
会社に資料を作っている人がいるのですが、毎回手作業でデータをコピーしていたので、プログラムでなんとかしてあげんとなーと思ってました。なかなかやるキッカケがなかったのですが、さっさとやってしまおう!と思って一気にやってみました。
railsで作っていたのでaxlsx_railsを使いました。
axlsxは既存のファイルを読み込んでテンプレートのようにはめ込み型で処理する、ということができないので一から全部作ります。
axlsxでのデータ入力は簡単です。
値を入力するには?
基本的には配列を作ってadd_rowに渡せばよいだけです。
workbook = xlsx_package.workbook workbook.add_worksheet(name: '概要') do |sheet| sheet.add_row ["aaa", "bbb", "ccc"] end
既に存在するデータを利用するには?
データの参照も簡単で、普通に式を渡すだけです。既にデータの入っているセルを指定することもできます。
workbook = xlsx_package.workbook workbook.add_worksheet(name: '概要') do |sheet| sheet.add_row [1, 2, 3] sheet.add_row ["=A1+A2+A3"] end
範囲指定してループするには?
また、シートの範囲のループも簡単です。sheet[座標:座標]で範囲指定できます。
workbook = xlsx_package.workbook workbook.add_worksheet(name: '概要') do |sheet| sheet.add_row [1, 2, 3] sheet["A1:A3"].each do |cell| puts cell.value end end
シートの範囲指定は、グラフを作るときの値の指定の際などに使えます。
グラフ(チャート)を作るには?
チャートを作るのも比較的簡単でした。
チャート毎に、チャート作成用クラスがあるのでそれを指定してブロックを作ります。
workbook = xlsx_package.workbook workbook.add_worksheet(name: '概要') do |sheet| # 事前にセルにデータが入っているとして… sheet.add_chart(Axlsx::LineChart, title: 'グラフタイトル') do |chart| chart.catAxis.gridlines = false # 横方向のラインを表示しない chart.valAxis.gridlines = true # 縦方向のラインを表示する chart.start_at 0, 10 # グラフを置く位置の始点(0,10 => A10) chart.end_at 8, 33 # グラフを置く位置の終点(8,33 => I33) chart.add_series( data: sheet["B2:Y2"], title: '売上', color: '6296C7', show_marker: true, labels: sheet["B1:Y1"]) # 横軸のラベル chart.add_series( data: sheet["B3:Y3"], title: '客単価', color: 'C86560', show_marker: true) chart.d_lbls.show_val = true # グラフ中に実数をプロットするか否か chart.catAxis.label_rotation = -45 # 横軸のラベルの表示角度を指定 chart.catAxis.crosses = :autoZero # 開始点を0にするか等 end end
グラフが簡単に作成できるのはとても嬉しいですね!
グラフによっては、存在する項目やそうでない項目もあるかもしれませんが、axlsxのgithubにあるexample.rbが結構詳しく書いてくれています(説明がないものもある)。自分はググりまくって調べたり、ソースコードを読んで調べたりしたのですが、なかなか気づけなかったものもあるので、この記事が参考になったら幸いです。