05 · 그룹별 시트 분리
시나리오
같은 갱신 리포트를 파일 하나로 만들되, 지역마다 시트를 따로 두고 싶습니다. 추가로 특정 상태값 목록에 해당하 는 "갱신 불가" 시트도 한 장 붙입니다.
접근: 시트 이름에 그룹 키를 박는다
템플릿 시트의 이름 자체가 시트 템플릿입니다. xl3는 그룹 키의 고유 값마다 시트를 하나씩 펼치면서 템플릿 내용을 그대로 복제합니다.
Template sheet name: 지역-{{ [지역] }}
xl3는 지역-{{ [지역] }} 라는 시트 이름을 그대로 읽어 들여 원본 행을 지역 으로 그룹핑하고, 지역마다 시트 하나씩을 지역-서울, 지역-부산 처럼 펼쳐냅니다.
__config__
| 키 | 값 |
|---|---|
source_sheet | 원본 |
source_table | 1 |
output_file_pattern | 지역별-리포트.xlsx |
템플릿 (시트 이름 지역-{{ [지역] }})
| 셀 | 값 |
|---|---|
| A1 | 계정 |
| B1 | 갱신액 |
| A2 | {{ [계정] }} |
| B2 | {{ [갱신액] }} |
| A3 | 합계 |
| B3 | {{ SUM([갱신액]) }} |
원본 데이터
| 계정 | 지역 | 갱신액 |
|---|---|---|
| 한솔 | 서울 | 18400 |
| 베타 | 부산 | 7200 |
| 코어 | 서울 | 25100 |
결과 (regions.xlsx)
- 시트
지역-서울: 한솔, 코어, 합계=43500. - 시트
지역-부산: 베타, 합계=7200.
명명된 목록으로 시트 필터링하기
자주 쓰는 패턴 하나 — 그룹마다 시트를 만들면서, 별도로 "$5k 미만 갱신 전체" 시트를 상태 목록 기준으로 한 장 더 붙이는 경우입니다. __lists__ 를 씁니다.
__lists__:
status_active: ["진행", "갱신중"]
status_inactive: ["해지", "만료"]
그리고 시트 템플릿에서는 이렇게 참조합니다.
시트 템플릿 이름: 관리대상
A1: 계정 | B1: 상태 | C1: 갱신액
A2: {{ @filter [상태] in __lists__[status_active] }}{{ @filter [갱신액] < 5000 }}{{ [계정] }}
B2: {{ [상태] }}
C2: {{ [갱신액] }}
한 블록 안의 @filter 디렉티브 여러 개는 AND 로 합성됩니다. 즉 각 필터가 직전 결과를 더 좁혀 들어갑니다.
참고
- 시트 이름은 Excel 의 31자 제한과 금지 문자(
[ ] / \ ? *)에 맞춰 정제됩니다. 정제 결과가 충돌하는 경우의 동작은 ADR-0021 에 따라 구현이 정의합니다 — 그룹 키 자체를 상류에서 유일하게 유지하세요. - 빈 그룹 키는 ADR-0026 에 따라
(blank)리터럴로 처리됩니다. - 시트 순서는 ADR-0016 에 따라 처음 등장한 순서를 따릅니다.