概要
axlsx は Ruby で Excel を操作するためのライブラリです
今回は Mac で使ってみました
環境
- macOS 10.13.6
- Numbers 5.1
- Ruby 2.5.1p57
- axlsx 2.0.1
インストール
- bundle init
- vim Gemfile
gem "axlsx"
bundle install --path vendor
とりあえずサンプル
axlsx の公式にもあるサンプルです
円グラフを表示するサンプルです
- vim test1.rb
require 'axlsx'
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Pie Chart") do |sheet|
sheet.add_row ["Simple Pie Chart"]
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
end
end
p.serialize('simple.xlsx')
end
- bundle exec ruby test1.rb
これで実行すると以下のようなエクセルが確認できました
シートを作成する
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
wb.add_worksheet(:name => "test")
p.serialize('simple.xlsx')
sample.xlsx というファイルに test というシートができます
指定のセルに値を追加する
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
sheet = wb.add_worksheet(:name => "test")
sheet.add_row ['', '', '', '']
sheet.rows[0].cells[1].value = 5
p.serialize('simple.xlsx')
これが意外と曲者でした
一度セルに対して何か値を入れないとそのセルを指定して値を入れることはできないのです
上であれば 1 行目の左から 4 セルに空白を入れてその後で 1 行目の 2 セル目に 5 という値を入れています
参考
足し算する
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
sheet = wb.add_worksheet(:name => "test")
1.upto(10) { |i| sheet.add_row [i] }
sheet.add_row ["=sum(A1:A10)"]
p.serialize('simple.xlsx')
単純に Excel で使っている式を文字列として追加するだけで OK です
SUM 以外の式に関しても同様のことが言えます
セルのスタイルを返る
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
sheet = wb.add_worksheet(:name => "test")
1.upto(10) { |i|
style = sheet.styles.add_style(:bg_color => "%06x" % (rand * 0xffffff), :fg_color => "FFFFFF")
sheet.add_row [i], :style => style
}
p.serialize('simple.xlsx')
シートからスタイル情報を生成し add_row するときに style 変数を指定します
今回はランダムで RGB 値を出していますが工夫すればグラデーション的なこともできると思います
最後に
Ruby で Excel を操作してみました
Office がなかったので Numbers で確認しました
もしかすると多少フォーマットが変わっているかもしれません
注意が必要なのは axlsx は書き込みしかできません
エクセルからデータを読み込む場合は roo などを使いましょう
これ以外にもいろいろなことができます
以下に記載したページにサンプルもたくさんあるので参考にしながら記載してみるといいと思います
0 件のコメント:
コメントを投稿