10 · 스타일링과 브랜딩
시나리오
출력 엑셀 파일은 회사 브랜드와 일치해야 합니다 — 시트 탭 색상, 폰트, 숫자 형식, 제목 영역의 병합 셀 같은 것들 말입 니다.
스타일은 템플릿 안에서 직접 작성
xl3 는 템플릿의 모든 스타일을 그대로 보존합니다. 데이터 블록은 행을 펼쳐내지만, 펼쳐진 각 행은 원본 템플릿 행의 폰트, 채우기, 테두리, 숫자 형식, 정렬 등을 그대로 물려받습니다. 데이터 블록 아래의 푸터 행도 스타일을 유지한 채 블록이 늘어난 만큼 아래로 밀려납니다.
별도의 "style" 디렉티브를 작성할 필요는 없습니다 — 엑셀 스타일은 템플릿 .xlsx 안에 그대로 살아있습니다.
시트 tabColor
엑셀에서 탭 색상을 지정합니다 (시트 탭 우클릭 → 탭 색). xl3 는 이를 ADR-0032 #3 에 따라 그대로 보존합니다. 출력 시트는 템플릿의 탭 색상을 그대로 유지합니다.
숫자 형식과 TEXT()
숫자를 어떻게 렌더링할지 제어하는 방법은 두 가지입니다.
1. 템플릿 셀의 numFmt. 템플릿 셀에 #,##0.00 이나 [$₩-ko-KR]#,##0 같은 숫자 형식을 미리 지정해 둡니다. 결과 셀도 동일한 형식을 갖게 됩니다.
2. 표현식 안의 TEXT(). 원하는 형식으로 강제 문자열 셀을 만듭니다.
{{ TEXT([금액], "₩#,##0") }}
{{ TEXT([일자], "yyyy-mm-dd") }}
{{ TEXT([비율], "0.0%") }}
문자열 연결에 형식화된 값을 끼워 넣어야 할 때는 TEXT() 를 씁니다. 예: {{ "합계: " & TEXT(SUM([금액]), "₩#,##0") }}.
TEXT() 가 지원하는 형식은 Excel 핵심 형식 표를 따릅니다. 핵심 표 밖의 형식은 ADR-0021 에 따라 구현 정의 동작입니다.
병합 셀
xl3 는 템플릿의 병합을 보존합니다.
- 데이터 블록 위쪽 병합은 자리 그대로 유지됩니다.
- 데이터 블록 아래쪽 병합은 블록이 늘어난 만큼 아래로 밀립니다.
- 데이터 블록 내부 병합 (템플릿 한 행 안에서의 셀 병합) 은 펼쳐진 모든 행에 그대로 적용됩니다.
데이터 블록 경계를 가 로지르는 세로 병합은 ADR-0021 에 따라 구현 정의 동작입니다 — 이식 가능한 템플릿에서는 피하세요.
병합 셀 헤더: 지원됨
거래명세서, 발주서, 정산서 같은 벤더 템플릿은 여러 컬럼을 묶어 하나의 제목을 붙이려고 헤더 셀을 가로로 병합하는 경우가 많습니다. xl3 는 0.5.0 부터 이를 네이티브로 읽습니다 (ADR-0033 기준). 가로로 병합된 헤더는 병합 마스터 위치에서 하나의 논리 컬럼을 만들고, 같은 행의 슬레이브 셀은 투명하게 처리됩니다.
예시: B1:D1 = "품목" (3 컬럼에 걸쳐 병합) 과 E1 = "수량" 으로 구성된 헤더 행은 품목, 수량 이라는 두 개의 원본 컬럼으로 읽힙니다. 품목 데이터는 B 컬럼에서 읽고, C 와 D 컬럼은 B 의 병합 슬레이브이므로 건너뜁니다.
여러 행에 걸친 헤더 영역 (행과 컬럼을 모두 아우르는 2D 병합) 도 동작합니다 — source_table 을 헤더 영역의 마지막 행에 맞춰 지정하면 그 바로 아래부터 데이터가 시작됩니다. J11:M12 영역이라면 source_table = J12:N 으로 설정합니다 (J11:N 으로 하면 행 12 가 병합 마스터의 텍스트를 끌고 가는 유령 데이터 행으로 잡힙니다).
원본에 실제로 동일 이름의 컬럼이 두 개 있다면 (병합 때문이 아니라), xl3/source/duplicate-name 은 여전히 발생합니다. 좁히기 (narrowing) 는 병합 슬레이브에만 적용됩니다.
인쇄 설정
pageSetup (방향, 여백, 인쇄 영역), views (확대/축소, 틀 고정), defaultRowHeight 모두 ADR-0032 #3 에 따라 보존됩니다. 템플릿에서 한 번만 설정하면 결과물에도 그대로 적용됩니다.
메모
- 엑셀 파일 속성 (테마, 정의된 이름, 인쇄 영역) 은 모두 그대로 보존됩니다. 템플릿에 한 번만 설정해 두면 모든 결과물이 이를 상속합니다.
- 스펙 참고: ADR-0032 "Niche limits and workbook pass-through behaviors"; 셀 단위 스타일링은
spec/evaluation.md"Cell Evaluation" 참고.