JavaScript에서 Connected Workbooks를 사용하여 실제 Excel 워크북을 내보내는 방법
Source: Dev.to

오늘날 데이터를 Excel로 내보내고 있다면, CSV 파일을 생성하거나 기본 XLSX 유틸리티를 사용하고 있을 가능성이 높습니다. 이러한 방법은 동작하지만 금방 한계에 부딪힙니다:
- CSV는 데이터 유형을 보존할 수 없습니다
- 수식, 서식 또는 테이블이 없습니다
- Power Query 또는 새로 고침 로직이 없습니다
- Excel Online과 통합할 방법이 없습니다
개발자들이 단순히 파일 이름이 .xlsx인 파일이 아니라 실제 Excel 동작을 원할 때, CSV는 부족합니다. 바로 그때 Connected Workbooks가 등장합니다.
이 가이드는 라이브러리가 무엇인지, 어떻게 작동하는지, 그리고 JavaScript 또는 TypeScript 애플리케이션에서 실제 Excel 워크북을 직접 내보내는 방법을 단계별로 안내합니다.
소개
CSV 내보내기는 간단하지만 제한적입니다. 다음을 표현할 수 없습니다:
- 풍부한 테이블
- 메타데이터
- 스타일링
- 재사용 가능한 워크시트
- 쿼리 연결
- 실제 Excel 구조
대시보드, 관리 도구 또는 분석 뷰를 구축하는 팀에게 CSV‑전용 내보내기는 좌절감을 줍니다. 실제 Excel에서 만든 것처럼 동작하는 Excel 워크북—테이블, 쿼리, 새로 고침 로직, 템플릿—이 필요합니다. Connected Workbooks는 몇 줄의 코드만으로 이를 제공합니다.
Connected Workbooks란?
Connected Workbooks는 Microsoft에서 유지 관리하는 오픈‑소스 JavaScript/TypeScript 라이브러리입니다.
Repository:
그 목적은 간단합니다: 웹 또는 백엔드 애플리케이션의 데이터를 받아 실제 Excel (.xlsx) 워크북을 생성하는 것—테이블, 쿼리, 템플릿까지 모두 포함합니다.
이 라이브러리는 애플리케이션과 Excel 사이의 다리 역할을 합니다:
- 애플리케이션이 HTML 테이블, 배열, 그리드 데이터, Power Query 쿼리를 제공하면
- Connected Workbooks가 이를 구조화된 Excel 테이블로 변환하고
Blob(또는 Buffer)를 생성합니다- 이를 다운로드하거나 바로 Excel Online에서 열 수 있습니다
이렇게 하면 Excel 파일 내보내기가 PDF 생성처럼 간단하고 선언적이며 신뢰할 수 있게 됩니다.
연결된 워크북 작동 방식
정신 모델
Your Application → Connected Workbooks → Excel Workbook (.xlsx)
제공할 수 있는 데이터 소스
- HTML
<table>요소 - 그리드 또는 배열 데이터
- Power Query 매시업
- 명명된 테이블이 포함된 Excel 템플릿
라이브러리가 생성하는 것
- Excel 테이블 (정적 복사값이 아님)
- 시트, 메타데이터 및 테이블 정의가 포함된 워크북
- 선택적 Power Query 연결
- 최종
.xlsxBlob/Buffer
비교
| 기능 | CSV / 기본 XLSX | 연결된 워크북 |
|---|---|---|
| 원시 값만 | ✅ | ❌ (실제 테이블) |
| 메타데이터 없음 | ✅ | ❌ (열 유형, 이름, 형식) |
| 새로 고침 로직 없음 | ✅ | ❌ (선택적 Power Query 새로 고침) |
| 구조 인식 없음 | ✅ | ❌ (템플릿, 테이블 주입) |
설치
npm install @microsoft/connected-workbooks
실용적인 단계별 안내: HTML 테이블 내보내기
HTML 테이블 예시
<table id="salesTable">
<thead>
<tr>
<th>Product</th>
<th>Units</th>
<th>Revenue</th>
</tr>
</thead>
<tbody>
<tr>
<td>Keyboard</td>
<td>124</td>
<td>80</td>
</tr>
<tr>
<td>Mouse</td>
<td>183</td>
<td>60</td>
</tr>
</tbody>
</table>
JavaScript/TypeScript 코드
import { WorkbookManager } from "@microsoft/connected-workbooks";
const workbookManager = new WorkbookManager();
async function exportTable() {
const tableElement = document.getElementById("salesTable");
const blob = await workbookManager.generateTableWorkbookFromHtml(tableElement);
// Option 1 — download locally
workbookManager.download(blob, "sales.xlsx");
// Option 2 — open directly in Excel Online
workbookManager.openInExcelWeb(blob, "sales.xlsx", true);
}
exportTable()을 실행하면 사용자는 별도의 XLSX 구조를 직접 만들 필요 없이 즉시 전문적인 Excel‑네이티브 내보내기를 받을 수 있습니다.
실제 사용 사례
- Analytics dashboards – 차트, 표, 원시 데이터를 워크북으로 내보내 분석가가 수정할 수 있게 함.
- Reporting tools – 사전 구축된 수식이 포함된 템플릿을 기반으로 하는 월간 또는 주간 보고서.
- Admin / internal systems – 단순 “Export to Excel” 버튼으로 실제 Excel 테이블을 생성—일반 CSV가 아님.
결론
CSV 내보내기를 벗어나거나 사용자에게 네이티브 Excel 경험을 제공하고 싶다면 Connected Workbooks는 실용적이고 개발자 친화적인 옵션입니다. 코드를 단순하게 유지하면서 사용자가 신뢰할 수 있는 실제 구조화된 Excel 워크북을 생성합니다.
레포지토리에서 더 많은 패턴, 예제 및 유틸리티 함수를 탐색해 보세요.