← 카탈로그
📊 Excel 내보내기 · 읽기
SheetJS(xlsx) 기반. 단일 시트 · 다중 시트 · 대용량 스트림까지 한 래퍼로.
샘플 데이터 (25행)
내보내기 · 읽기 데모
사용법
import { excel } from "~/features/common/excelExporter";
// 1. 단일 시트
excel.exportRows(users, [
{ field: "id", header: "ID", width: 8 },
{ field: "name", header: "이름" },
{ field: "score", header: "점수", numFmt: "#,##0" },
], { fileName: "사용자목록", namuStyle: true });
// 2. AG Grid 현재 화면만 (필터·정렬 반영)
excel.exportFromGrid(api, { fileName: "필터된목록", onlySelected: true });
// 3. 다중 시트
excel.exportMultiSheet([
{ sheetName: "사용자", rows: users, columns: userCols },
{ sheetName: "주문", rows: orders, columns: orderCols },
], { fileName: "통합리포트" });
// 4. 대용량 스트림 (진행률 표시)
for await (const p of excel.exportLargeAsStream(asyncRowGen, cols, 5000)) {
setProgress(p.processed / p.estimatedTotal);
}
// 5. 업로드된 엑셀 읽기
const sheets = await excel.readExcel(file);
console.log(sheets[0].rows);서버 대용량 (Java POI SAX)
10만 행 이상 업로드는 브라우저 OOM 위험 → Java SXSSF/SAX 스트리밍으로 넘기는 것이 안전. 백엔드 예시: POST /api/v1/admin/excel/stream (멀티파트)
curl -X POST http://localhost:8082/api/v1/admin/excel/stream \
-H "Authorization: Bearer $TOKEN" \
-F "file=@huge.xlsx"
# → 500만 행도 상수 메모리로 파싱, batch(5000) 씩 서버 로직에 넘김