在 JavaScript (Node.js) 中处理 Excel:库与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 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

推荐