Docurain Labo

Docurainサービス開発日記

Docurainを使って帳票作りにチャレンジ(その2:明細行、フッターの記述法)

DocurainはWeb APIを使って簡単に納品書や請求書をはじめとする、帳票を生成するサービスになります。今回はこのDocurainの使い方について、帳票を一から作成してみます。

前回は帳票のヘッダーについて解説しましたので、今回は注文などの繰り返し部分(明細行)やフッターの書き方を解説します。

テーブル定義を解除する

今回参照した帳票では、注文一覧部分がテーブルとして定義されています。Docurainではテーブル定義は利用できませんので、テーブル部分の適当なセルを選択した状態で、テーブルデザインの中にある 範囲に変換 を選びます。

f:id:moongift:20210719183614p:plain

確認ダイアログが出たら、そのまま はい を選択してください。

ロジック記述を追加する

今回の注文データは複数(可変)定義できることとします。つまり、データは次のように定義されていることとします。今回は3件ですが、4件や5件でも問題ありません。

"orders": [
  {
    "num": 100,
    "no": 1001,
    "unit": 100,
    "info": "ボールペン",
    "discount": 0
  },
  {
    "num": 300,
    "no": 1002,
    "unit": 200,
    "info": "カードケース",
    "discount": 5000
  },
  {
    "num": 200,
    "no": 1003,
    "unit": 100,
    "info": "付箋紙",
    "discount": 6000
  }
],

そこで、まず帳票のテーブル部分の1行目にあたる部分のA列(ロジック記述用の列)に、次のように記述します。

#foreach($o in $e.orders)

これは、JSON内の orders を繰り返し処理するという命令になります。そして3行目には次のように記述します。

#end

これは繰り返し処理部分の終わりを指定しています。つまり #foreach から #end で囲まれた行の処理を繰り返すという意味になります。実際の記述内容は次の通りです。

f:id:moongift:20210719183649p:plain

繰り返し行部分の記述

繰り返し処理で $o と記述しています。繰り返し処理時には、この $o の中に注文データが繰り返し入ってきます。つまり最初の $o の内容は次のようになります。

{
  "num": 100,
  "no": 1001,
  "unit": 100,
  "info": "ボールペン",
  "discount": 0
}

これに従って、明細行の内容を記述していきます。今回は次のようになります。

f:id:moongift:20210719183707p:plain

データがない場合について

たとえば備考など、必ずしもデータがない場合もあるでしょう。そうした時には $!{o.info} のように ! を付けておきます。こうすることで、データが場合には空白になります。

繰り返し行内での計算処理について

通常のExcelではセルの値を参照した計算処理は =A5*E5 のように書きます。しかし、繰り返し処理部分では行番号が変わってしまいます。そこで、Docurainでは %= という行頭記号を使います。今回の小計計算は次のように記述します。

%= $o.unit * $o.num - $o.discount

%= を記述しておくことで、テンプレートとして処理されます。つまり1行目の場合には %= $o.unit * $o.num - $o.discount=100*100-0 と変換されます。これで正しく計算処理されるようになります。

フッターの処理について

帳票のフッターでは合計金額を出すことが多いでしょう。合計金額は明細行の集計結果になりますので、セルが可変の場合に書くのが困難です。そこでDocurainではセルに名前を定義して対応します。今回は割引の合計金額を例に紹介します。

まず、割引金額(上下のセルを含めて)を範囲選択します。

f:id:moongift:20210719183741p:plain

そして、その範囲に名前を付けます。今回は 値引き としています。

f:id:moongift:20210719183751p:plain

今は3行が名前の範囲ですが、繰り返し処理が行われると自動的に拡張されます。そこで、割引合計のセルは =SUM(値引き) とすることで、集計された金額が入力されるようになります。小計も同様です。

f:id:moongift:20210719183802p:plain

消費税や集計金額についても同じように明細行を使うこともできますが、小計セルの名前を 小計 などと名前を付けて、そのセルを対象として =小計*1.1 とした方が分かりやすいでしょう。

f:id:moongift:20210719183812p:plain

後は、他にも置き換えられる文字列をJSONで定義し、置き換え文字列として定義すれば完成です。

f:id:moongift:20210719183825p:plain

今回のJSONデータは次のようになりました。

{
  "company": {
    "name": "ルート42株式会社",
    "message": "クラウド帳票開発のドキュレイン"
  },
  "customer": {
    "name": "ドキュメント 太郎",
    "company": "帳票株式会社",
    "address1": "〒110-0012 東京都台東区",
    "address2": "竜泉1-10-6 秋田屋ビル2F",
    "tel": "03-000-0000"
  },
  "billing": {
    "no": "100010",
    "date": "2021-07-19"
  },
  "orders": [
    {
      "num": 100,
      "no": 1001,
      "unit": 100,
      "info": "ボールペン",
      "discount": 0
    },
    {
      "num": 300,
      "no": 1002,
      "unit": 200,
      "info": "カードケース",
      "discount": 5000
    },
    {
      "num": 200,
      "no": 1003,
      "unit": 100,
      "info": "付箋紙",
      "discount": 6000
    }
  ],
  "charge": {
    "name": "ルート 花子",
    "tel": "03-111-1111",
    "email": "info@docurain.jp"
  }
}

実行する

今回もコマンドラインで実行します。OSによってコマンドが多少変わるので注意してください。 YOUR_TOKEN はDocurainのトークン | Docurainにて取得できるトークンになります。

Windowsの場合

Windowsではコマンドプロンプトを利用してください。テンプレートのXLSXファイル、上記JSONデータファイルがあるフォルダ内でコマンドを実行します。

curl -X POST https://api.docurain.jp/api/instant/pdf ^
     -H "Authorization:token YOUR_TOKEN" ^
     -H "Content-Type:multipart/form-data" ^
     -F "template=@./receipt.xlsx;type=application/vnd.ms-excel" ^
     -F "entity=@./data.json;type=application/json" ^
     -o receipt.pdf

macOS/Linuxの場合

macOSやLixuxはターミナルを利用してください。Windowsと同じく、テンプレートのXLSXファイル、上記JSONデータファイルがあるフォルダ内でコマンドを実行します。

curl -X POST https://api.docurain.jp/api/instant/pdf  \
     -H "Authorization:token YOUR_TOKEN" \
     -H "Content-Type:multipart/form-data" \
     -F "template=@./receipt.xlsx;type=application/vnd.ms-excel" \
     -F "entity=@./data.json;type=application/json" \
     -o receipt.pdf

これで明細行含め、正しくPDFが得られるか確認してください。

f:id:moongift:20210719183848p:plain

まとめ

今回は新しい帳票ファイルを使って、Docurainのテンプレートにしていく過程を紹介しました。コマンドや表示方法は他にも多数ありますので、Excelテンプレート リファレンス | Docurainを参照してください。