在 JavaScript (Node.js) 中处理 Excel:库概览与代码示例
尽管 PythonLib 专注于 Python 语言,但在 Node.js 环境中也经常需要处理 Excel 电子表格。JavaScript(尤其是在服务器端)被广泛用于报表自动化、从 CRM 系统导入数据以及生成价目表。在本文中,我们将介绍三个用于在 Node.js 中处理 Excel 的主要库、它们的功能,并提供实用的代码示例。
为什么要在 Node.js 中处理 Excel?
Node.js 是处理大量数据的微服务和脚本的理想选择。Excel 库可以实现以下功能:
- 读取现有的
.xlsx和.xls文件。 - 从头创建新的表格。
- 格式化单元格(颜色、字体、边框)。
- 处理公式、样式和合并单元格。
- 将数据导出为 CSV。
Node.js 中处理 Excel 的三大库
1. ExcelJS — 功能最全面
ExcelJS 是一个功能强大的库,完全支持 xlsx 格式。它支持流式处理,这对于大文件至关重要。支持样式、条件格式、图表和工作表保护。
安装:
npm install exceljs示例 1:读取现有文件
const ExcelJS = require('exceljs');
async function readExcel(filePath) { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(filePath); const worksheet = workbook.getWorksheet(1); // 第一个工作表 worksheet.eachRow((row, rowNumber) => { console.log(`行 ${rowNumber}: ${row.values.join(', ')}`); });}
readExcel('data.xlsx');示例 2:创建带格式的文件
const ExcelJS = require('exceljs');
async function createStyledExcel() { const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet('报表'); // 标题:粗体并带填充色 const headerRow = sheet.getRow(1); headerRow.values = ['姓名', '年龄', '城市']; headerRow.font = { bold: true, size: 12 }; headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFF00' } // 黄色背景 }; // 数据 sheet.addRow(['安娜', 28, '莫斯科']); sheet.addRow(['伊万', 35, '圣彼得堡']); // 列宽 sheet.getColumn(1).width = 15; sheet.getColumn(2).width = 10; await workbook.xlsx.writeFile('output.xlsx'); console.log('文件已创建!');}
createStyledExcel();2. xlsx (SheetJS) — 轻量且快速
xlsx 库(也称为 SheetJS)是执行简单操作的“主力军”。它不支持高级格式化,但在读取/写入数据方面表现出色。支持 xlsx、xls、csv、ods 格式。
安装:
npm install xlsx示例 3:读取并转换为 JSON
const XLSX = require('xlsx');
function readToJSON(filePath) { const workbook = XLSX.readFile(filePath); const sheetName = workbook.SheetNames[0]; const sheet = workbook.Sheets[sheetName]; // 将工作表转换为对象数组 const data = XLSX.utils.sheet_to_json(sheet); console.log(data);}
readToJSON('data.xlsx');示例 4:写入数据数组
const XLSX = require('xlsx');
function writeFromArray() { const data = [ { Name: '奥尔加', Age: 30, City: '喀山' }, { Name: '彼得', Age: 42, City: '叶卡捷琳堡' } ]; const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils