04 · グループごとにファイルを分ける
シナリオ
更新レポートを 1 つの大きなファイルではなく、地域別に .xlsx を 1 つずつ出力したいとします。運用チームは各地域のファイルをその地域の担当者にそのまま渡せます。
__config__
| キー | 値 |
|---|---|
source_sheet | 元データ |
source_table | 1 |
output_file_pattern | {{ [地域] }}.xlsx |
グループキーは output_file_pattern で参照した値です。xl3 はそのパターンの評価結果を基準にソース行をグループ化し、異なる値ごとにファイルを 1 つずつ生成します。
元データ(シート 元データ)
| 取引先 | 地域 | 更新金額 |
|---|---|---|
| アクメ | 東京 | 18400 |
| ベータ | 大阪 | 7200 |
| コレオン | 東京 | 25100 |
結果
2 つのファイル:
東京.xlsx― アクメとコレオンの行が入ります。大阪.xlsx― ベータが入ります。
複数キーでのグループ化
output_file_pattern = {{ [地域] }}-{{ [ランク] }}.xlsx
グループキーがタプル (地域, ランク) になります。異なるタプルごとに別ファイルが作られます ― 東京-A.xlsx、東京-B.xlsx、大阪-A.xlsx のように。
ファイル名のサニタイズ
xl3 は ADR-0002 に従ってファイル名をサニタイズします ― / \ : * ? " < > | に含まれる禁止文字と制御文字は、それぞれ _ 1 つに 1:1 で置換され、先頭の空白と末尾のドット・空白は切り取られます。連続した _ は結合されません。異なる 2 つのグループ値が同じファイル名にサニタイズされる場合 ― 例えば 東京/日本 と 東京:日本 の両方が 東京_日本.xlsx になる場合(禁止文字 1 つにつき _ 1 つ) ― xl3 は ADR-0031 に従って黙って上書きする代わりに xl3/filename/collision エラーを投げます。
グループキーが空のとき
行のグループキー値が空のとき、xl3 は ADR-0026 に従って Excel ピボットの慣例である (blank) リテラルに置き換えます。該当行は (blank).xlsx に入ります。
メモ
- ファイル順序は ADR-0016 に従い、ソースで最初に登場した順序を踏襲します。
- 1 ファイル内で地域別シートに分けるシート単位のグループ化は Recipe 05 を参照してください。