본문으로 건너뛰기

반복되는 Excel 문서를 위한 템플릿 엔진

Excel 변환 로직, 코드가 아니라
템플릿으로.

개발자 없이 Excel 출력 양식을 직접 변경하세요.

Fast
Deterministic
Portable
Spec-first

동작 방식

비개발자가 직접 작성 가능한 Excel 생성 로직.

Excel에서 양식을 디자인하고 데이터를 연결하면 xl3가 문서를 생성합니다. 원본 데이터 → 템플릿 → 결과를 나란히 비교해 보세요.

데이터 연결 살펴보기

필드에 마우스를 올리거나 키보드로 선택해 연결을 확인하세요. 클릭하면 고정되고, 다시 클릭하거나 Esc를 누르면 해제됩니다.

필드를 선택해 보세요
01

매번 들어오는 원본 데이터

data.xlsx실행마다 달라지는 변환 전 데이터
ABCD
1
2
3
4
5
6
7
8
Sheet1

고객, 금액, 담당자처럼 매번 바뀌는 데이터를 .xlsx 또는 JSON으로 전달합니다. 아직 템플릿을 적용하기 전의 입력 데이터입니다.

02

Excel 파일 안에서 변환을 선언

template.xlsx실행 가능한 Excel 템플릿
ABCDE
1Customer Renewal Report
2
3
4
5
6
7
8
Report

Excel에서 제목 배경색, 글꼴, 테두리와 셀 병합을 디자인합니다. 데이터가 들어갈 셀에는 XTL {{ … }}을 작성합니다.

03

새 데이터, 같은 서식의 문서

result.xlsx렌더링된 Excel 파일, 서식 보존됨
ABCDE
1Customer Renewal Report
2
3
4
5
6
7
8
Report

데이터가 달라져도 템플릿의 제목 배경색, 글꼴, 셀 병합, 테두리와 숫자 서식은 그대로 유지됩니다.

책임 기반 자동화

문서 변경을 배포 대기열 밖으로 옮기세요.

대부분의 Excel 자동화 도구는 개발자를 더 빠르게 만듭니다. xl3는 다른 결과를 지향합니다 — 예전에는 개발자가 필요했던 문서 변경을 운영자가 직접 맡도록 하는 것입니다. 모든 거래처가 저마다의 포맷을 요구할 때, 개발자 한 명이 그 포맷을 하나씩 구현하고 바뀔 때마다 다시 고치는 구조는 병목이 됩니다.

xl3는 수개월간 운영된 사내 서비스에서 다듬어졌습니다. 그 기간 동안 비개발자들이 Excel에서 직접 템플릿과 변환 규칙을 유지했고, 개발자는 거의 전적으로 런타임에 집중했습니다. 실제로 줄어든 것은 코드의 양이 아니라, 애초에 개발자가 손대야 하는 일의 양이었습니다.

개발자

런타임을 소유합니다: 엔진 동작, 검증, 통합, 배포, 안정성.

runtime

운영자

템플릿을 소유합니다: 레이아웃, 열, 반복 규칙, 출력 형식, 문서별 로직 — Excel에서 직접 편집합니다.

template.xlsx

비즈니스

문서가 조금 바뀔 때마다 릴리스를 기다리지 않고, 완성된 Excel 파일을 바로 받아 씁니다.

result.xlsx

xl3는 개발자를 대체하려는 것이 아닙니다. 개발자는 런타임을, 운영자는 템플릿을 소유하며, 문서 자동화는 개발자만의 업무가 아니라 조직의 역량이 됩니다.

왜 Excel이 템플릿인가

Excel 서식을 코드로 작성하지 마세요.

ExcelJS, SheetJS, openpyxl, Apache POI는 스프레드시트의 DOM API입니다. 강력하지만 장황합니다. 리포트 레이아웃, 스타일, 병합 셀, 반복이 코드에 들어가면 열 하나 추가, 소계 이동, 헤더 서식 변경 같은 모든 디자인 변경이 배포가 됩니다.

xl3는 매번 되풀이되는 그 규칙을 다시 Excel 안으로 돌려놓습니다. Excel 파일은 이미 뷰이고, XTL이 이를 실행 가능하게 만듭니다. 애플리케이션은 데이터를 공급하고 엔진을 실행할 뿐입니다. 템플릿은 평범한 .xlsx이므로 — 매크로도, 벤더 클라우드도 없습니다 — diff를 뜨고, 풀 리퀘스트에서 리뷰하고, xl3를 들어본 적 없는 사람에게 건넬 수 있습니다.

라이브러리가 아니라 열린 표준

명세, 적합성 스위트, 그리고 레퍼런스 구현.

xl3는 세 부분으로 이루어진, 구현에 독립적인 열린 표준으로 정의됩니다. XTL의 표현 범위는 의도적으로 작게 유지해, 템플릿을 사람이 읽기도 AI가 초안을 쓰기도 쉽습니다.

명세 (xl3 + XTL)

규범적 정의: xl3 워크북 포맷과 그 작은 임베디드 표현 언어인 XTL. 함수는 파일이 만들어지기 전에 값이 정해져야 할 때만 XTL에 존재합니다 (ADR-0043).

spec/

적합성 스위트

모든 구현이 실행해 적합성을 증명하는 언어 중립적 픽스처. 다른 언어 이식이 맞춰야 하는 계약은 특정 구현이 아니라 이 픽스처 모음입니다.

conformance/

레퍼런스 구현

@xl3-lang/xl3(TypeScript)는 브라우저와 Node에서 실행됩니다. 유용하지만 규범은 아닙니다. Rust/WASM과 Python 이식이 진행 중입니다.

@xl3-lang/xl3

XTL 0.1은 79 ADRs171 conformance fixtures를 갖추고 있으며, Stage 2에서 모두 통과합니다. TypeScript 레퍼런스 구현은 @xl3-lang/xl3에 게시되어 있습니다. 포팅 가이드가 계약을 문서화해, 다른 언어 이식이 이를 맞출 수 있게 합니다.

비교

같은 문제, 다른 형태.

접근 방식강점트레이드오프
xl3선언적 Excel 템플릿 실행. Excel 파일은 이미 존재하고, xl3가 데이터를 넣어 실행합니다.릴리스 후보, 단일 메인테이너, 1.0 계약은 2026-11-28까지 기술 안정화 중입니다.
Workbook APIs (ExcelJS, SheetJS, openpyxl, POI)애플리케이션 코드에서 저수준 또는 완전한 기능의 Excel 파일 생성.레이아웃, 스타일, 병합, 반복, 비즈니스 규칙이 코드가 됩니다. 비개발자는 템플릿을 안전하게 편집할 수 없습니다.
Python / VBA scripts기존 스프레드시트에 가까운 빠른 일회성 자동화.규칙이 코드나 한 담당자의 기억 속에 존재하며, 레이아웃 변경에는 여전히 코드 수정이 필요합니다.
Power Query / Office ScriptsExcel 생태계 안에서의 Microsoft 365 워크플로와 데이터 정형화.테넌트에 종속되며, 워크플로 규칙이 Excel 파일과 함께 이동하지 않습니다.
Template engines (JXLS, xltpl, jsreport xlsx)스프레드시트형 템플릿에서의 서버 사이드 리포트 생성.유용한 선행 사례지만, 대개 하나의 런타임에 묶여 있고 작고 이식 가능한 Excel 규칙 포맷으로 자리 잡지는 못했습니다.
Doc-gen SaaS (Plumsail, Conga, Formstack)관리형 문서 워크플로, 통합, 승인, 전달.규칙이 벤더 서비스에 존재하며, 직접 검토하고 실행할 수 있는 이식 가능한 Excel 템플릿이 아닙니다.
Direct LLM → xlsx빠른 탐색적 초안 작성, 일회성 차트.반복 운영을 위한 결정론적 변환 계약이 아니며, 실행할 때마다 스타일과 합계가 달라집니다.

개발자 API

같은 워크플로를 제품에 그대로 연결하세요.

애플리케이션이 이미 메모리에 가진 데이터를 넘기고, Excel 템플릿을 적용해 완성된 .xlsx 파일을 받으세요. convertJson()은 JavaScript 객체를 직접 받으므로 원본 데이터 파일이나 중간 workbook이 필요하지 않습니다.

terminal
$npm install @xl3-lang/xl3
example.ts
import { convertJson } from '@xl3-lang/xl3';

const outputs = await convertJson(templateBuffer, {
  version: 'xl3-source-json/0.1',
  sources: { default: {
    headers: ['Customer', 'Amount'],
    rows: orders.map(o => [o.customer, o.amount]),
  } },
});
// OutputFile[].data → .xlsx Uint8Array

5분 만에 시작하기 · 명세 읽기 · 포팅 가이드