Docurain Labo

Docurainサービス開発日記

条件付き書式を使って色の出し分けを実現する

帳票では一部を目立たせたい時に、色を利用します。たとえば赤字やマイナスといった目を配るべきデータがあれば、赤文字の出力にするでしょう。同じように明細行で1行ずつ色を変えることで、見間違いを防いだりできます。

Docurainでこのように帳票の中での色付けを行いたい時には、条件付き書式を使うと便利です。今回は条件付き書式を使って、ガントチャート風の表示を実現してみました。

できあがった帳票

まずは完成版から紹介します。

f:id:moongift:20211126154525j:plain

仕様は次のようになっています。

  • 色は赤、青、黄色、緑が利用可能。色は行毎にJSONデータで指定します。
  • タスクの開始日、終了日に合わせてラインが引かれます。
  • 日付は基準日(最初の日付)から2週間分を対象とします。

実際のJSONデータは次のようになります。colorキーでr/g/b/yを使って色指定しています。startDateキーがタスクの開始日、endDateがタスクの終了日になります。

{
  "baseDate": "2021/11/26",
  "tasks": [
    {"title": "DB設計", "startDate": "2021/11/26", "endDate": "2021/11/30", "color": "r"},
    {"title": "クラウド選定", "startDate": "2021/11/26", "endDate": "2021/12/02", "color": "b"},
    {"title": "リポジトリ作成", "startDate": "2021/11/28", "endDate": "2021/11/28", "color": "y"},
    {"title": "概要設計", "startDate": "2021/11/26", "endDate": "2021/12/03", "color": "g"},
    {"title": "フレームワーク選定", "startDate": "2021/11/27", "endDate": "2021/11/29", "color": "r"}
  ]
}

テンプレートの記述

ではここからテンプレート側の記述について解説します。まず一番左の日付はJSONデータのbaseDateをそのまま出力しています。そして、そのセルに BASEDATE という名前を付けています。

${e.baseDate}

そしてその右側のセルから、順番に =BASEDATE + 1=BASEDATE + 2 … といった具合に式を定義していきます。表示上は14日分で足りるのですが、計算処理の都合上、最後は =BASEDATE + 15 とします。

変数の定義と繰り返し処理

A1セルではJSONデータを扱いやすくするために $e を定義します。

#set($e = $ENTITY)

さらに数式の自動シフト(簡易)を利用するために #EASY_SHIFT_FORMULA も定義します。

#EASY_SHIFT_FORMULA

チャート部分は繰り返し処理になりますので、foreach を使います。

#foreach($task in $e.tasks)
  // この間の行でチャート部分を作成します
#end

チャート(明細)の処理

チャート部分はまず単純な出力を行います。色情報も出力していますが、画面の表示上は不要なので、白文字で出力しています。

B C D E
${task.title} ${task.startDate} ${task.endDate} ${task.color}

計算式の定義

チャート部分では、次のような計算式を定義しています。

  • ある日付がタスクの開始日よりも後
  • ある日付がタスクの終了日よりも前
  • 上記2つの条件にマッチする場合に色情報のテキストを出力する

実際の記述は次のようになります。 $ を使うことで縦方向(または横方向)コピーした際に計算式が別なセルを参照するのを防いでいます。

=IF(AND($C6<=F4,$D6>=F4),$E6,"")

こうすると、データを適用した結果が次のようになります。

11月26日 11月27日 11月28日 11月29日 11月30日 12月1日 12月2日
DB設計 2021/11/26 2021/11/30 r r r r r r
クラウド選定 2021/11/26 2021/12/2 b b b b b b b b
リポジトリ作成 2021/11/28 2021/11/28 b b
フレームワーク選定 2021/11/27 2021/11/29 r r r r

条件付き書式の設定

ではいよいよ条件付き書式を設定します。条件付き書式のルールの管理を選択します。

f:id:moongift:20211126154329p:plain

そして、次のように設定をします。

項目 内容
スタイル クラシック
対象 指定の値を含むセルだけを書式設定
特定の文字列
次の値を含む
y

この時の書式設定をユーザ設定の書式とします。上記例のようなyであれば黄色で出力したいので、塗りつぶしとフォントカラーを同じ黄色に指定します。r(赤)/b(青)/g(緑)も同じように定義します。

f:id:moongift:20211126154346p:plain

書式設定の適用先として $F$5:$T$7 のようにしてforeachループの含まれる範囲を指定します。そうすると、先ほどのr/b/g/yといった文字列が入ったセルが、それぞれの色に置き換わって表示されます。

f:id:moongift:20211126154408p:plain

PDFで出力する

この条件付き書式はExcelだけでなく、PDFにも適用されます。PDFで出力すると、設定した通りにガントチャートが出力されるはずです。

f:id:moongift:20211126154421p:plain

まとめ

条件付き書式を設定することで、配色の伴うレポートでも自在に出力できるようになります。なお、Excel上で細かく計算処理を行うと複雑度が増す可能性があるのであまりお勧めしません。出力するか否かを含めてデータ側で指定できるようにすると、テンプレートをシンプルに維持できるでしょう。