大家好,我是第八哥,作为一名做了十年互联网开发的老兵,我一直都在寻找一种既好用又灵活的方式,来解决前端对Excel文件的读取、操作与写入需求。ExcelJS 算是我这几年最常用的工具之一,不管是在浏览器端还是 Node 端,都能轻松搞定各种复杂的 Excel 任务。
什么是 ExcelJS?为什么值得用?
ExcelJS 是一个纯 JavaScript 的 Excel 操作库,可以在前端和 Node 环境中使用。我喜欢它的原因很简单:API 清晰、功能强、兼容性好,还用起来不费脑子。对于需要自定义格式、数据导出、模板填充的项目来说,它基本能全覆盖。
核心功能包括: 读取 Excel、写入 Excel、设置样式、合并单元格、操作多工作表、导入模板等。
ExcelJS 的优势与不足
优点方面: 第一,它无需依赖 Excel 环境;第二,API 语义化强;第三,多端通用;第四,支持丰富的格式设置,适合报表类需求。
不足方面: 文件写入对大体量数据性能一般;另外,复杂公式依然有局限,这点在财务类项目中要特别注意。
如何在项目中快速使用 ExcelJS?
不管是 React、Vue 还是 Node 工程,都只需要一行命令:
安装 ExcelJS:
npm install exceljs安装好之后,就可以开始你的 Excel 编程之旅了。
示例一:读取 Excel 文件
很多场景下,我们的任务并不是生成 Excel,而是读取并处理用户上传的 Excel 文件。这里给你一个最常用的读取示例:
import ExcelJS from 'exceljs';
async function readExcel(file) {
const workbook = new ExcelJS.Workbook();
const buffer = await file.arrayBuffer();
await workbook.xlsx.load(buffer);
const sheet = workbook.getWorksheet(1);
const result = [];
sheet.eachRow((row, rowIndex) => {
result.push(row.values);
});
return result;
}这个示例适合前端文件上传场景,比如后台管理系统的数据导入功能。
示例二:生成 Excel 并导出
ExcelJS 最强大的地方之一,就是能够自由生成 Excel。你可以控制工作表、单元格格式、边框、颜色甚至合并单元格。
import ExcelJS from 'exceljs';
async function exportExcel() {
const workbook = new ExcelJS.Workbook();
const sheet = workbook.addWorksheet('用户数据');
sheet.addRow(['ID', '姓名', '年龄']);
sheet.addRow([1, '王小明', 28]);
sheet.addRow([2, '李小红', 26]);
sheet.getRow(1).font = { bold: true };
sheet.columns = [
{ width: 10 },
{ width: 20 },
{ width: 10 }
];
const buffer = await workbook.xlsx.writeBuffer();
const blob = new Blob([buffer]);
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '用户数据.xlsx';
link.click();
}这段代码适合在前端直接生成并下载 Excel 文件,常见于报表导出、数据备份等需求。
示例三:设置样式与合并单元格
如果你需要更美观的报表,可以利用 ExcelJS 的样式支持,比如背景色、边框或者合并单元格。
sheet.mergeCells('A1:C1');
const title = sheet.getCell('A1');
title.value = '销售报表';
title.alignment = { horizontal: 'center' };
title.font = { size: 16, bold: true };这些配置让你可以做出接近模板化的 Excel 报表,非常适合运营类系统或BI系统导出。
性能与实战建议
我在长期使用 ExcelJS 的过程中,总结了几个小技巧:
1. 大数据优先用流式写入。 ExcelJS 支持流式写入,可以减少内存占用。
2. 样式越多性能越差。 尽量减少不必要的边框、颜色操作。
3. 模板比动态生成表头更高效。 尤其是复杂报表,建议先做 Excel 模板,再按单元格填值。
场景适配:浏览器 vs Node
在浏览器端,ExcelJS 适合文件导入导出、轻量报表生成;在 Node 端,它更适合定时脚本、后台批量生成 Excel、生成带格式的合同或数据报表。
你可以根据运行环境搭配 Buffer、ReadStream、WriteStream,灵活程度可谓拉满。
ExcelJS 适合哪些项目?
如果你的项目中存在数据导出、Excel 表单处理、报表生成、用户上传数据解析等场景,那么 ExcelJS 基本就是首选。它足够灵活,也足够简单,无论你是前端工程师还是 Node 全栈,都能轻松驾驭。
总结
ExcelJS 是一个强大且易用的 Excel 操作库,不仅支持多端使用,还能帮你快速处理复杂数据。灵活的样式、完善的 API、优雅的导入导出能力,让它成为前端与 Node 项目的必备工具。如果你正在寻找更高效的 Excel 解决方案,ExcelJS 绝对值得尝试。
评论