Skip to content

ExcelJS

本篇范围

本篇聚焦 ExcelJS —— 一个在 Node.js 与浏览器中读取、操作、写入 XLSX 电子表格数据与样式的 JavaScript 库。它与 SheetJS(xlsx)同属「电子表格读写」选型方向,本篇在对比与定位时一笔带过另一者。版本基线 ExcelJS 4.x(npm latest 为 4.4.0,MIT 许可)。

ExcelJS 的官方定位是「Read, manipulate and write spreadsheet data and styles to XLSX and JSON」。它最大的特点是把 Excel 的样式与格式做成了完整的对象模型——字体(font)、填充(fill)、边框(border)、对齐(alignment)、数字格式(numFmt)、条件格式、数据校验、合并单元格、图片,乃至流式读写大文件,全都能用 JavaScript 精细控制。它是同构的:同一套核心 API 既能在 Node.js 用文件/流读写,也能在浏览器用 writeBufferBlob 导出、用 load 解析上传文件。

它最该被记牢的几条「现状」与易错点:纯色填充的可见色取 fgColor(不是 bgColor,这是新手第一坑;颜色一律用 ARGB 对象 { argb: 'FFFF0000' },8 位十六进制首两位是 Alpha 透明度;样式对象按引用共享,把同一个 font/fill 赋给多格后再改它会牵连所有格,需独立时要先克隆;worksheet.getCell 写入 Date 后要配 numFmt 才显示成日期大数据导出用 new ExcelJS.stream.xlsx.WorkbookWriter + commit() 而非普通 Workbook,否则内存会爆;ExcelJS 不是计算引擎——写入公式不会自动求值,需自带 result 缓存或交给 Excel。

评价

优点

  • 样式/格式精细到位font/fill/border/alignment/numFmt、条件格式、数据校验、合并单元格、富文本、图片,对象化全覆盖,是「生成带样式报表」的首选
  • 同构、一套核心 API 跑两端:Node 用 readFile/writeFile/流,浏览器用 load/writeBuffer + Blob 下载,样式能力一致
  • 流式读写省内存stream.xlsx.WorkbookWriter / WorkbookReadercommit()for await,可处理几十万行而不 OOM
  • 列模型友好worksheet.columns 定义 header/key/width 后,可用 addRow({key:value}) 按键写入、getColumn('key') 按键取列
  • 值类型丰富:单元格支持数字、字符串、Date、公式 { formula, result }、超链接 { text, hyperlink }、富文本 { richText: [...] }
  • CSV 一并支持workbook.csv 命名空间底层基于 fast-csv,可配 dateFormats / parserOptions
  • TypeScript 友好:自带类型声明,配置对象有完整提示

缺点

  • 不是计算引擎:写入公式不会求值,结果需 result 缓存或打开 Excel 重算
  • 样式按引用共享易踩坑:同一对象赋多格后修改会连动,需自行克隆才能独立
  • 无内置列宽自适应:没有 autoFit,自适应列宽要手动遍历单元格按最长文本估算
  • 填充取色反直觉solid 填充看的是 fgColor 而非 bgColor,极易设错
  • 格式解析广度不及 SheetJS:聚焦 xlsx / csv,不读 .xls 旧二进制 / .ods / .numbers
  • 不渲染 UI:只负责文件读写,表格界面渲染是 AG Grid 等组件库的事

文档地址

ExcelJS GitHub README

GitHub 地址

exceljs/exceljs

幻灯片地址

ExcelJS