Axlsxにて、条件付き書式を使う


RubyでExcelファイルを生成できるAxlsxで、条件付き書式を設定したいと思いました。

条件付き書式とは?

条件付き書式とは、セルの値が条件に合ったら文字の色や背景色を変えるとか、そういうのができるやつです。

よくある使い方では、テストで成績が

  • 上位な人のセルは緑、
  • 中位の人のセルは黄色
  • 下位の人のセルは赤

にするとかですね。

Axlsxで条件付き書式を設定する

書式を定義する

まず、条件付き書式で使う書式を定義します。その際に、type: :dxfを指定します。
サンプルコードを飛ばし読みしていたせいでここになかなか気付かなくて數十分時間を無駄にしました…。

Axlsx::Package.new do |package|
  package.workbook do |workbook|
    red_text = workbook.styles.add_style(
      font_name: 'MS Pゴシック',
      sz: 10,
      fg_color: 'FF0000',
      type: :dxf # ここ重要
    )
  end
end

条件付き書式をセルに反映する

条件付き書式をセルに反映するには、WorkSheet#add_conditional_formattingメソッドを使います。

今回は、A列の値が0未満だったら赤文字にするという条件付き書式を設定してみます。

red_text = workbook.styles.add_style(
  font_name: 'MS Pゴシック',
  sz: 10,
  fg_color: 'FF0000',
  type: :dxf
)

workbook.add_worksheet(name: 'sheet1') do |worksheet|
  # 行を入れていく処理などを行う、が省略…

  # 条件付き書式を設定
  worksheet.add_conditional_formatting(
    "A1:A1048576",
    type: :cellIs,
    operator: :lessThan,
    formula: '0',
    dxfId: red_text,
    priority: 1
  )
end

結果は以下のような感じ。いいですね!

その他、サンプル

サンプルは、githubにもあります。こちらのほうには様々な条件付き書式のサンプルがあるので参考にしましょう。

example_conditional_formatting.rb