ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库
ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库
【免费下载链接】exceljs 项目地址: https://gitcode.com/gh_mirrors/exc/exceljs
ExcelJS 是一个功能强大的 JavaScript 库,专门用于读取、操作和写入 Excel 电子表格数据,支持 XLSX 和 JSON 格式。它是一个开源项目,旨在提供一个简单而强大的接口来处理电子表格数据。
项目介绍
ExcelJS 是一个跨平台的 Excel 处理库,不仅可以在 Node.js 环境中使用,还支持浏览器环境,使其成为一个非常灵活的工具。它支持丰富的功能,包括单元格样式、公式、图表、图片插入、数据验证等高级功能。
快速开始
安装
通过 npm 安装 ExcelJS:
npm install exceljs 基本示例
以下是一个简单的示例,展示如何创建一个新的 Excel 文件并添加数据:
const ExcelJS = require('exceljs'); // 创建新工作簿 const workbook = new ExcelJS.Workbook(); // 添加工作表 const worksheet = workbook.addWorksheet('员工数据'); // 添加表头 worksheet.addRow(['ID', '姓名', '邮箱', '部门']); worksheet.addRow([1, '张三', '[email protected]', '技术部']); worksheet.addRow([2, '李四', '[email protected]', '市场部']); worksheet.addRow([3, '王五', '[email protected]', '财务部']); // 设置单元格样式 worksheet.getRow(1).font = { bold: true, color: { argb: 'FF0000FF' } }; worksheet.columns = [ { header: 'ID', key: 'id', width: 10 }, { header: '姓名', key: 'name', width: 20 }, { header: '邮箱', key: 'email', width: 30 }, { header: '部门', key: 'department', width: 15 } ]; // 保存文件 workbook.xlsx.writeFile('员工数据.xlsx') .then(() => { console.log('Excel 文件已保存'); }) .catch((error) => { console.error('保存文件时出错:', error); }); 核心功能
1. 工作簿操作
ExcelJS 提供了完整的工作簿管理功能:
// 设置工作簿属性 workbook.creator = '系统管理员'; workbook.lastModifiedBy = '自动生成'; workbook.created = new Date(); workbook.modified = new Date(); // 添加多个工作表 const sheet1 = workbook.addWorksheet('销售数据'); const sheet2 = workbook.addWorksheet('库存数据'); const sheet3 = workbook.addWorksheet('财务报表'); 2. 单元格样式
支持丰富的单元格样式设置:
// 设置字体样式 worksheet.getCell('A1').font = { name: '微软雅黑', family: 2, size: 14, bold: true, color: { argb: 'FFFF0000' } }; // 设置边框 worksheet.getCell('A1').border = { top: { style: 'thin' }, left: { style: 'thin' }, bottom: { style: 'thin' }, right: { style: 'thin' } }; // 设置背景色 worksheet.getCell('A1').fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFFF00' } }; 3. 数据验证
支持数据验证功能:
worksheet.dataValidation.add('B2:B10', { type: 'list', allowBlank: true, formulae: ['"技术部,市场部,财务部,人事部"'] }); 4. 公式支持
支持 Excel 公式:
worksheet.getCell('D2').value = { formula: 'SUM(B2:C2)', result: 1500 }; 高级功能
读取 Excel 文件
const workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('数据文件.xlsx') .then(() => { const worksheet = workbook.getWorksheet(1); worksheet.eachRow((row, rowNumber) => { console.log(`行 ${rowNumber}:`, row.values); }); }); 流式处理
对于大型文件,可以使用流式处理:
const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: '大型数据文件.xlsx' }); const worksheet = workbook.addWorksheet('数据'); // 逐行写入数据 for (let i = 0; i < 100000; i++) { worksheet.addRow([i, `数据${i}`, Math.random() * 100]).commit(); } workbook.commit().then(() => { console.log('文件写入完成'); }); 应用场景
1. 数据导出
将数据库中的数据导出为 Excel 报表:
async function exportUserData() { const users = await UserModel.findAll(); const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('用户数据'); worksheet.addRow(['用户ID', '用户名', '邮箱', '注册时间']); users.forEach(user => { worksheet.addRow([ user.id, user.username, user.email, user.createdAt ]); }); await workbook.xlsx.writeFile('用户数据导出.xlsx'); } 2. 模板生成
生成复杂的报表模板:
function generateReportTemplate() { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('月度报表'); // 设置报表标题 worksheet.mergeCells('A1:D1'); worksheet.getCell('A1').value = '2024年月度销售报表'; worksheet.getCell('A1').font = { size: 16, bold: true }; worksheet.getCell('A1').alignment = { horizontal: 'center' }; // 设置表头 const headers = ['月份', '产品A', '产品B', '总计']; worksheet.addRow(headers); // 设置数据格式 worksheet.getColumn(2).numFmt = '#,##0'; worksheet.getColumn(3).numFmt = '#,##0'; worksheet.getColumn(4).numFmt = '#,##0'; return workbook; } 最佳实践
1. 错误处理
async function safeExcelOperation() { try { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile('data.xlsx'); // 处理数据 } catch (error) { console.error('Excel 操作失败:', error.message); throw error; } } 2. 性能优化
对于大数据量处理:
// 使用流式写入 const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: 'large-data.xlsx', useStyles: true, useSharedStrings: true }); // 分批处理数据 const batchSize = 1000; for (let i = 0; i < totalRecords; i += batchSize) { const batch = records.slice(i, i + batchSize); batch.forEach(record => { worksheet.addRow(record).commit(); }); } 3. 内存管理
// 及时释放资源 function processLargeFile() { const workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('large-file.xlsx') .then(() => { // 处理数据 // 完成后手动释放内存 workbook.worksheets.forEach(ws => ws.model = null); }); } 生态系统集成
ExcelJS 可以与其他流行的 JavaScript 框架集成:
与 Express.js 集成
const express = require('express'); const ExcelJS = require('exceljs'); const app = express(); app.get('/export', async (req, res) => { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('数据'); worksheet.addRow(['名称', '值']); worksheet.addRow(['项目A', 100]); worksheet.addRow(['项目B', 200]); res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); res.setHeader('Content-Disposition', 'attachment; filename=export.xlsx'); await workbook.xlsx.write(res); res.end(); }); 与前端框架集成
在浏览器环境中使用:
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/exceljs.min.js"></script> <script> // 浏览器端使用 const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('数据'); worksheet.addRow(['浏览器', '版本', '支持情况']); worksheet.addRow(['Chrome', '90+', '支持']); worksheet.addRow(['Firefox', '88+', '支持']); workbook.xlsx.writeBuffer().then(buffer => { // 创建下载链接 const blob = new Blob([buffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = '浏览器支持情况.xlsx'; a.click(); }); </script> 总结
ExcelJS 是一个功能全面、性能优异的 Excel 处理库,无论是简单的数据导出还是复杂的报表生成,都能提供强大的支持。其跨平台的特性使得它既可以在服务器端使用,也可以在浏览器端运行,为开发者提供了极大的灵活性。
通过合理的错误处理、性能优化和内存管理,ExcelJS 可以处理各种规模的 Excel 文件,是企业级应用和数据处理工具的理想选择。
【免费下载链接】exceljs 项目地址: https://gitcode.com/gh_mirrors/exc/exceljs