@marcusok/excel-exporter
基于 modern-xlsx(WASM)与自研 Fast stream 构建的 Excel 导出库:声明式 API、自动模式路由、完整单元格样式、Web Worker 多线程、大文件快速写入,以及无样式流式降级兜底。
能力清单
| 能力 | 说明 |
|---|---|
| 声明式 API | 用 sheets + columns + data 描述导出,无需手写单元格 |
| 自动模式路由 | auto 按数据量选择 main / worker / Fast stream(阈值 20,000 / 50,000 行) |
| 完整单元格样式 | 字体、填充、对齐、边框、数字格式;内置 8 种 StylePresets |
| 值格式化 | FormatSpec 声明式格式化(enum / date / datetime / number / padding) |
| Worker 多线程 | 主线程仅一次结构化克隆,构建在 Worker 内执行(≥ 5 万行的流式路径不依赖 WASM) |
| 流式写入 | 自研 fast-xlsx.ts + fflate,10 万行约 0.8s |
| 多级兜底 | WASM 不可用时自动降级无样式快速流 |
| 进度/阶段回调 | onProgress、onPhase 便于可视化与埋点 |
安装
bash
pnpm add @marcusok/excel-exporter一条安装命令即得全部:导出引擎(modern-xlsx JS 胶水 + fflate)与进度遮罩 UI 都在构建期打包进本包 dist,WASM / worker 资产在打包器与 Node 中均自动定位(自托管场景才需要 configureWasm),详见 快速开始。
快速上手
ts
import { exportExcel, StylePresets } from "@marcusok/excel-exporter";
await exportExcel({
filename: "sales-report",
sheets: [
{
name: "Sales",
freezeRows: 1,
autoFilter: true,
columns: [
{ prop: "orderId", label: "订单号", width: 18 },
{
prop: "amount",
label: "金额",
width: 14,
style: StylePresets.currency,
},
],
data: [{ orderId: "ORD-001", amount: 9999.99 }],
},
],
});文档目录
- 指南:安装配置、自动模式、样式、格式化、高级特性、Worker/流式、兜底、Node/SSR、性能
- 使用案例:销售月报、库存台账、大文件导出、多 Sheet 工作簿(含 mock 数据预览)
- API 参考:入口函数、类型定义、样式预设、FormatSpec
版本与依赖
- 当前版本:构建时从工作区
package.json读取(单一数据源;文档站不查询 npm registry) - 运行时依赖:
modern-xlsx——仅类型声明,让发布的.d.ts里的外部类型导入可解析;引擎本体(及遮罩 UI)在构建期打包进本包dist,WASM 二进制通过本包自己的exports映射分发 - 环境:Node >= 22;浏览器需支持 WebAssembly
性能数字为本机实测(真实 Chrome,6 列混合类型),详见 性能参考。