在 JavaScript (Node.js) 中处理 Excel:库概览与实践示例
尽管 PythonLib 专注于 Python 语言,但在现代 Web 开发中,经常需要使用 Node.js 在服务器端处理 Excel 表格。JavaScript (Node.js) 是一个强大的服务器端应用开发环境,处理电子表格是其中一项常见需求。在本文中,我们将介绍三个在 Node.js 中处理 Excel 的主要库:node-xlsx (xlsx)、exceljs 和 excel4node,并提供它们的使用示例。
为什么需要在 Node.js 中处理 Excel?
在服务器端,通常需要:
- 生成 XLSX 格式的报告供用户下载;
- 从上传的 Excel 文件中将数据导入数据库;
- 自动处理价目表、会计表格及其他文档;
- 创建包含格式、图表和样式的复杂报告。
Node.js 通过提供多个专用库,能够很好地胜任这些任务。
xlsx 库 (SheetJS)
SheetJS(xlsx 包)是 JavaScript 中最流行且最成熟的 Excel 处理库。它支持读写多种格式:XLSX、XLS、CSV、ODS 等。主要优势在于简单和快速。
安装
npm install xlsx示例:创建并保存 Excel 文件
const XLSX = require('xlsx');
// 创建一个新的工作簿const workbook = XLSX.utils.book_new();
// 表格数据const data = [ ['姓名', '年龄', '城市'], ['安娜', 28, '莫斯科'], ['伊万', 35, '圣彼得堡'], ['玛丽亚', 22, '喀山']];
// 将数组转换为工作表const worksheet = XLSX.utils.aoa_to_sheet(data);
// 将工作表添加到工作簿XLSX.utils.book_append_sheet(workbook, worksheet, '用户');
// 将文件写入磁盘XLSX.writeFile(workbook, 'users.xlsx');console.log('文件 users.xlsx 已创建!');示例:读取现有文件
const XLSX = require('xlsx');
const workbook = XLSX.readFile('users.xlsx');const sheetName = workbook.SheetNames[0]; // 获取第一个工作表const worksheet = workbook.Sheets[sheetName];
// 将工作表转换为对象数组const jsonData = XLSX.utils.sheet_to_json(worksheet);console.log(jsonData);exceljs 库
ExcelJS 是一个更新、功能更丰富的库。它提供了丰富的格式化功能:单元格样式、字体、颜色、单元格合并、条件格式、图像和图表处理。支持流式处理大文件。
安装
npm install exceljs示例:创建格式化报告
const ExcelJS = require('exceljs');
async function createReport() { const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet('报告');
// 定义列 sheet.columns = [ { header: '商品', key: 'product', width: 30 }, { header: '价格', key: 'price', width: 15 }, { header: '数量', key: 'quantity', width: 15 } ];
// 添加数据 sheet.addRow({ product: '笔记本电脑', price: 75000, quantity: 10 }); sheet.addRow({ product: '鼠标', price: 1500, quantity: 50 }); sheet.addRow({ product: '键盘', price: 3500, quantity: 30 });
// 格式化标题行 const headerRow = sheet.getRow(1); headerRow.font = { bold: true, size: 12, color: { argb: 'FFFFFFFF' } }; headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } };
// 对齐方式 headerRow.alignment = { vertical: 'middle', horizontal: 'ce