12KB 轻量 Excel 导出库,完整样式支持,开箱即用,浏览器 & Node.js
- 🚀 高效生成
.xlsx格式的 Excel 文件 - 📦 12KB 极致轻量(gzip),从零开始编写,仅依赖 fflate & mustache
- 💻 Office Open XML 标准子集,具备良好兼容性,可在 Microsoft Excel、WPS Office、Numbers、macOS/钉钉/微信预览中正确展示
- 🎨 单元格格式面板完整功能支持:
- 格式(数字的各种格式化)
- 对齐(水平、缩进、垂直、方向、自动换行、缩小字体填充)
- 字体(字体、字形(加粗、斜体)、字号、颜色、下划线、删除线、上标、下标)
- 边框(上下左右对角线、14种边框样式)
- 背景色(18种填充样式)
- 全局设置(单元格合并、行高、列宽)
- 🌐 同时支持 Node.js 和浏览器环境
- 😀 简洁明了的接口,易于理解和使用
- 📄 Learn by example,充分的示例,足以替代文档
一个示例文件在 Microsoft Excel 中的展示效果
生成该文件的代码:examples/showtime.ts
本库的设计遵循以下原则,旨在为 Web 后台的 Excel 导出场景提供简单、可靠、轻量的解决方案,由于本库非常轻量,所以也非常适合移动端场景。
本库主要面向网页应用后台中常见的“查询结果导出 Excel”场景,所有设计均围绕该核心用例展开,力求在常见业务中提供简洁高效的解决方案。
本库专注于 Excel 文件的生成与导出,不提供解析能力。因此,以下开发模式不适用:
❌ 读取现有模板文件,并对特定单元格或区域进行修改。
(如需此类功能,建议使用 SheetJS 等支持读写操作的库。)
本库覆盖了 Excel 单元格格式面板中的所有样式(如字体、对齐、边框、填充、数字格式等),但不支持高级格式特性,例如:
- 在同一个单元格内对不同文字设置不同样式(富文本)
- 图表、条件格式、公式等高级功能
在 API 设计上,尽可能复用 Excel 原生的术语和结构,降低用户学习成本,提升配置直观性。
为简化使用逻辑并避免运行时状态管理的复杂性,本库采用单向数据流设计:
- 所有配置必须在对象初始化时完成;
- 实例化后,对象状态不可修改;
- 确保输出可预测,易于调试和测试。
为减小体积并降低系统复杂度,本库采用以下技术方案:
- 使用
Mustache模板引擎渲染 Excel 内部 XML 文件; - 使用
fflate进行高效压缩,生成最终的 .xlsx 文件。
- 无需依赖大型办公文档处理库,如 jszip + sheetjs(gzip 后 312KB)
- 包体积小,适合前端直出 Excel 文件
- 自带样式功能,sheetjs 需购买商业版或使用过时的样式插件
- ✅ 需要将表格数据导出为 Excel 的后台管理系统
- ✅ 移动端 Excel 文件生成
- ✅ 希望快速集成、不依赖 Node.js 环境的前端项目(当然,也可以在 Node.js 中使用)
- ✅ 不需要复杂格式或模板修改的轻量级场景
- ❌ 需要读取或修改现有 Excel 文件(建议使用 SheetJS)
- ❌ 需要单元格内富文本、图表、公式等高级功能
- ❌ 需要支持 .xls 格式(本库仅输出 .xlsx)
使用 npm 安装:
npm install sheetex使用 yarn 安装:
yarn add sheetex使用 pnpm 安装:
pnpm add sheetex生成工作表和工作簿(在浏览器和Node.js中都一样):
import { WorkSheet, WorkBook } from 'sheetex';
// 生成一个工作表,里面有一个数据块,数据块里有一行数据,第一个列是"hello",第二列是"world",该数据块位于A1
const ws = new WorkSheet('sheet1', [{ data: [['hello', 'world']], origin: 'A1' }]);
// 生成一个工作簿,里面有一个工作表
const wb = new WorkBook([ws]);在浏览器中保存
wb.saveAs('example.xlsx');在服务器中保存
// 获取文件的 buffer 形式
const buffer = await wb.getZipBuffer();
// 保存到服务器文件系统
fs.writeFileSync('example.xlsx', buffer);在服务器上生成文件并返回给客户端
// 获取文件的 buffer 形式
const buffer = await wb.getZipBuffer();
// 返回给客户端(以 express 为例)
res.set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.send(buffer);您可以通过例子学习本库的使用方法:
强烈建议在查看示例代码前,先打开同名的 xlsx 文件查看最终效果,可以很好的加快理解。文件位于 src/examples/xlsx/ 目录。
如果标题居中对齐、表头文字加粗、给所有数据套上边框已经是你全部的需求。
尽管用 just 开头的三个函数实现你的需求吧!
等到对细节有更多要求时,再来查看深入学习部分。
- simple.ts 无样式快速导出 Excel
- format.ts 数字的格式化(取整、保留小数、科学计数法、货币格式等)
- font.ts 字体相关设置(字体、大小、颜色、加粗、斜体、下划线、删除线、上下标)
- alignment.ts 对齐(水平对齐、垂直对齐、缩进、文本旋转、自动换行、缩小字体填充)
- border.ts 边框线型和颜色的设置,以及多边框组合使用的方法
- fill.ts 背景色填充,一般而言仅需了解其中的 solid 样式即可
- option.ts 行高、列宽、单元格合并
- showtime.ts 根据一个真实项目中的案例编写,展示了对上面各类样式的综合应用
完整的 API文档,包含所有对用户暴露的对象、方法和 TypeScript 类型
欢迎提交 Issue 和 Pull Request 来帮助改进这个项目。
本项目采用 MIT 许可证。详情请见 LICENSE 文件。
