XTL 0.1 draft · TypeScript reference implementation

Excel-to-Excel 변환, 명세로 정의합니다.

xl3는 Excel workbook을 템플릿으로 사용하기 위한 작고 conformance로 검증되는 언어를 정의합니다. 템플릿도 workbook이고, 데이터도 workbook이며, 결과도 여전히 workbook입니다.

Interactive walkthrough

변환의 단위는 workbook입니다.

모델을 순서대로 따라가 보세요. 각 규칙이 활성화될 때 오른쪽 Excel 예시가 바뀝니다. 화면은 익숙한 Excel 형태를 유지하지만, 동작은 XTL과 conformance fixture로 정의됩니다.

01

데이터는 workbook입니다

원본 row는 일반 `.xlsx` 파일에서 옵니다. 첫 row는 field 이름이 됩니다.

02

템플릿도 workbook입니다

셀에는 일반 레이아웃과 `{{ [Customer] }}` 같은 XTL 표현식이 함께 들어갑니다.

03

렌더링은 Excel을 보존합니다

결과 workbook은 sheet 구조, 숫자 형식, 스타일, 병합 셀을 보존합니다.

04

동작은 테스트 가능합니다

Stage 1은 셀 값을 확인하고, Stage 2는 서식과 구조를 위해 canonical OOXML을 비교합니다.

data.xlsx workbook이 원본 row를 제공합니다.
Header row의 field가 XTL source column이 됩니다.

왜 표준인가요?

Excel 자동화의 동작은 하나의 구현체로 정의되면 안 됩니다.

많은 Excel 자동화 도구는 유용하지만, 동작이 특정 라이브러리가 우연히 하는 일로 정의되는 경우가 많습니다. 그러면 다른 언어로 포팅하기 어렵고, edge case를 논의하기도 어렵습니다.

xl3는 반대로 갑니다. 먼저 prose specification을 두고, 그 다음 실행 가능한 fixture를 두며, reference implementation은 그 뒤에 둡니다. JavaScript package는 유용하지만, 의도된 계약은 XTL과 conformance corpus입니다.

Conformance

서식도 결과의 일부입니다.

Excel에서는 값만 비교하는 것으로 충분하지 않습니다. xl3는 cell-value bootstrap stage와 canonical OOXML 비교를 분리합니다.

Stage 1

worksheet 이름과 관찰 가능한 셀 값을 비교합니다. 언어 의미론 검증에 유용합니다.

npm run conformance

Stage 2

스타일, 숫자 형식, 병합, 구조를 포함한 canonical workbook package를 비교합니다.

xl3-conformance --comparison-stage=2

Current corpus

TypeScript reference implementation은 현재 XTL 0.1 fixture corpus를 통과합니다.

27 / 27 fixtures

Use it

작은 API, 명시적인 계약.

terminal
$ npm install xl3
example.ts
import { convert } from 'xl3';

const outputs = await convert(templateBuffer, dataBuffer);
// OutputFile[] -> formatted .xlsx workbook(s)