跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.js大前端

ExcelJS 使用教程:JavaScript Excel 处理库

ExcelJS 是用于读写 Excel 的 JavaScript 库,支持 XLSX 和 JSON 格式。它具备单元格样式、公式、图表等功能,兼容 Node.js 与浏览器环境。介绍安装方法、核心功能(工作簿操作、样式设置、数据验证)、高级特性(流式处理、文件读取)及集成方案(Express、前端)。通过错误处理和性能优化,适用于企业级数据导出与报表生成。

无尘发布于 2026/3/23更新于 2026/10/26455 浏览

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 文件,是企业级应用和数据处理工具的理想选择。

目录

  1. ExcelJS 使用教程
  2. 项目介绍
  3. 快速开始
  4. 安装
  5. 基本示例
  6. 核心功能
  7. 1. 工作簿操作
  8. 2. 单元格样式
  9. 3. 数据验证
  10. 4. 公式支持
  11. 高级功能
  12. 读取 Excel 文件
  13. 流式处理
  14. 应用场景
  15. 1. 数据导出
  16. 2. 模板生成
  17. 最佳实践
  18. 1. 错误处理
  19. 2. 性能优化
  20. 3. 内存管理
  21. 生态系统集成
  22. 与 Express.js 集成
  23. 与前端框架集成
  24. 总结

更多推荐文章

查看全部
  • Presenton 故障排除指南:常见问题与解决方案
  • 昇腾 A2 部署 Pi0 机器人大模型:CANN 环境实测
  • DeepSeek-R1 开源大模型推理优化实战方案
  • 数据结构:八种常见排序算法详解
  • 从人类视频到机器人跳舞:BeyondMimic 全流程解析与 rl_sar 部署实践
  • 2026 年主流 AI 大模型实测排名与选型建议
  • OpenClaw 开源 AI 智能体核心原理与本地部署教程
  • 基于 AR 眼镜的亲戚称呼助手开发实战
  • DALL·E 3 绘图功能与 API 使用指南
  • OpenClaw 联网工具完全指南:提升 AI 实时信息获取能力
  • QClaw 上手指南:本地 AI 代理工具深度体验
  • ESP32 无人机飞控日志记录:SD NAND 存储方案测试
  • Java 安全开发实战:从代码防护到架构安全
  • llama.cpp 大模型本地部署与使用指南
  • STM32CubeMX 部署 AI 模型全流程指南
  • Redis 安装与配置教程 (Windows, Linux, macOS)
  • WorkBuddy 使用指南:从零开始配置 QQ 机器人
  • Dify MCP Server 插件实战:将工作流发布为第三方可调用服务
  • AI 鸿蒙 App 开发中的架构逻辑转变
  • Robo-Diffusion 机器人图像生成使用技巧

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online