AxlsxでExcel上にグラフを作ってみた。

個人的に、といっても会社用のツールだけれど、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が結構詳しく書いてくれています(説明がないものもある)。自分はググりまくって調べたり、ソースコードを読んで調べたりしたのですが、なかなか気づけなかったものもあるので、この記事が参考になったら幸いです。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です