当前位置: 首页 > news >正文

ExcelJS核心功能解析:读写XLSX文件从未如此简单

ExcelJS核心功能解析:读写XLSX文件从未如此简单

【免费下载链接】exceljsExcel Workbook Manager项目地址: https://gitcode.com/gh_mirrors/ex/exceljs

你是否还在为处理Excel文件而烦恼?手动编辑大量数据耗时费力,复杂的格式转换让人头疼?现在,有了ExcelJS,这些问题都将迎刃而解。ExcelJS是一个功能强大的JavaScript库,能够轻松读取、操作和写入XLSX和JSON格式的电子表格数据及样式。读完本文,你将能够:快速上手ExcelJS,掌握工作簿和工作表的基本操作,实现数据的高效读写,以及了解如何处理单元格样式和格式。

什么是ExcelJS?

ExcelJS是一个开源的JavaScript库,专为处理电子表格文件而设计。它可以在Node.js环境和浏览器中运行,提供了丰富的API,让开发者能够轻松地创建、修改和解析Excel文件。无论是生成报表、处理数据分析结果,还是实现Excel文件的导入导出功能,ExcelJS都能胜任。

该项目的源代码托管在https://link.gitcode.com/i/c4c9e1c14cbd0c46dc1dfabeabd7463a,你可以通过克隆仓库来获取最新版本:

git clone https://link.gitcode.com/i/c4c9e1c14cbd0c46dc1dfabeabd7463a.git

安装ExcelJS非常简单,只需使用npm命令:

npm install exceljs

核心功能概览

ExcelJS提供了一系列强大的功能,使其成为处理Excel文件的理想选择。以下是其核心功能的简要概述:

  1. 创建和管理工作簿:可以新建工作簿,设置工作簿属性,如创建者、修改日期等。
  2. 工作表操作:添加、删除、重命名工作表,设置工作表属性,如标签颜色、网格线显示等。
  3. 数据读写:支持读写单元格数据,包括文本、数字、日期、公式等多种类型。
  4. 单元格样式:可以设置单元格的字体、颜色、对齐方式、边框、填充等样式。
  5. 数据验证:为单元格添加数据验证规则,确保输入数据的有效性。
  6. 图表支持:虽然目前支持有限,但可以创建基本的图表。
  7. 流式处理:支持大型Excel文件的流式读写,提高性能并减少内存占用。

快速上手:创建你的第一个Excel文件

让我们通过一个简单的示例来了解如何使用ExcelJS创建一个Excel文件。首先,我们需要引入ExcelJS库:

const ExcelJS = require('exceljs');

接下来,创建一个新的工作簿(Workbook):

const workbook = new ExcelJS.Workbook();

工作簿是Excel文件的容器,一个工作簿可以包含多个工作表(Worksheet)。现在,让我们添加一个工作表:

const worksheet = workbook.addWorksheet('我的第一个工作表');

我们可以为工作表设置一些属性,例如标签颜色:

worksheet.properties.tabColor = { argb: 'FFC0000' }; // 红色标签

现在,我们可以向工作表中添加数据了。ExcelJS提供了多种添加数据的方式,最简单的是直接设置单元格的值:

worksheet.getCell('A1').value = 'Hello'; worksheet.getCell('B1').value = 'ExcelJS'; worksheet.getCell('A2').value = '这是一个'; worksheet.getCell('B2').value = '示例';

除了单个单元格赋值,我们还可以通过行对象来添加一行数据:

const row = worksheet.addRow(['姓名', '年龄', '邮箱']); row.font = { bold: true }; // 设置表头字体为粗体

然后继续添加数据行:

worksheet.addRow(['张三', 30, 'zhangsan@example.com']); worksheet.addRow(['李四', 25, 'lisi@example.com']); worksheet.addRow(['王五', 35, 'wangwu@example.com']);

添加完数据后,我们可能需要调整列宽以确保内容完整显示:

worksheet.getColumn('A').width = 10; worksheet.getColumn('B').width = 6; worksheet.getColumn('C').width = 20;

最后,将工作簿写入文件:

workbook.xlsx.writeFile('示例.xlsx') .then(function() { console.log('文件创建成功!'); }) .catch(function(error) { console.log('创建文件时出错:', error); });

运行这段代码,你将得到一个名为"示例.xlsx"的Excel文件,其中包含了你刚刚添加的数据。

深入了解:工作簿与工作表

工作簿(Workbook)

工作簿是Excel文件的顶层对象,它包含了所有的工作表和相关信息。在ExcelJS中,Workbook类负责管理工作簿的各种属性和操作。

查看lib/doc/workbook.js文件,我们可以看到Workbook类的主要结构和方法。它包含了工作表管理、属性设置、文件读写等核心功能。

创建工作簿后,你可以设置一些基本属性:

workbook.creator = 'ExcelJS'; workbook.lastModifiedBy = 'ExcelJS User'; workbook.created = new Date(); workbook.modified = new Date();

工作簿还支持设置一些高级属性,如计算属性:

workbook.calcProperties.fullCalcOnLoad = true; // 加载时强制计算所有公式

工作表(Worksheet)

工作表是实际存储和展示数据的地方。一个工作簿可以包含多个工作表,每个工作表都是独立的,可以有自己的格式和数据。

添加工作表时,除了指定名称,还可以设置一些初始选项:

const worksheet = workbook.addWorksheet('销售数据', { properties: { tabColor: { argb: 'FF00FF00' } }, // 绿色标签 views: [{ showGridLines: false }] // 隐藏网格线 });

工作表提供了多种访问和操作单元格的方法:

// 通过单元格地址访问 const cellA1 = worksheet.getCell('A1'); // 通过行号和列号访问(注意:行号从1开始,列号从1开始) const cellB2 = worksheet.getRow(2).getCell(2); // 设置单元格值 cellA1.value = '销售额'; cellB2.value = 1000;

你还可以对整行或整列进行操作:

// 获取第3行 const row3 = worksheet.getRow(3); row3.values = ['产品A', 500, 1500]; // 设置整行值 // 获取B列 const columnB = worksheet.getColumn('B'); columnB.numFmt = '$#,##0.00'; // 设置B列为货币格式

数据操作:读写与格式化

读取Excel文件

ExcelJS不仅可以创建新的Excel文件,还可以读取现有的Excel文件并对其进行操作。以下是一个读取Excel文件的示例:

const workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('现有文件.xlsx') .then(function() { // 获取第一个工作表 const worksheet = workbook.getWorksheet(1); // 遍历工作表中的行 worksheet.eachRow(function(row, rowNumber) { console.log('第' + rowNumber + '行: ', row.values); }); }) .catch(function(error) { console.log('读取文件时出错:', error); });

对于大型Excel文件,建议使用流式读取来提高性能:

const workbook = new ExcelJS.stream.xlsx.WorkbookReader('大型文件.xlsx'); for await (const worksheetReader of workbook) { console.log('工作表名称:', worksheetReader.name); for await (const row of worksheetReader) { // 处理每一行数据 console.log(row.values); } }

单元格数据类型

ExcelJS支持多种单元格数据类型,包括:

  • 文本(String)
  • 数字(Number)
  • 日期(Date)
  • 布尔值(Boolean)
  • 公式(Formula)
  • 超链接(Hyperlink)
  • 富文本(Rich Text)

以下是设置不同数据类型的示例:

// 文本 worksheet.getCell('A1').value = 'Hello ExcelJS'; // 数字 worksheet.getCell('A2').value = 12345; // 日期 worksheet.getCell('A3').value = new Date(2023, 0, 1); // 2023年1月1日 worksheet.getCell('A3').numFmt = 'yyyy-mm-dd'; // 设置日期格式 // 布尔值 worksheet.getCell('A4').value = true; // 公式 worksheet.getCell('A5').value = { formula: 'SUM(B2:B10)', result: 0 }; // 超链接 worksheet.getCell('A6').value = { text: '访问ExcelJS官网', hyperlink: 'https://exceljs.github.io/exceljs/' }; // 富文本 worksheet.getCell('A7').value = { richText: [ { text: '这是', font: { size: 12 } }, { text: '富文本', font: { size: 14, bold: true, color: { argb: 'FFFF0000' } } }, { text: '示例', font: { size: 12 } } ] };

单元格样式

ExcelJS提供了丰富的样式设置选项,可以让你美化你的Excel表格。以下是一些常用的样式设置:

const cell = worksheet.getCell('A1'); // 设置字体 cell.font = { name: 'Arial', size: 12, bold: true, italic: false, underline: false, color: { argb: 'FF000000' } // 黑色 }; // 设置填充 cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFFF00' } // 黄色 }; // 设置对齐方式 cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true // 自动换行 }; // 设置边框 cell.border = { top: { style: 'thin', color: { argb: 'FF000000' } }, left: { style: 'thin', color: { argb: 'FF000000' } }, bottom: { style: 'thin', color: { argb: 'FF000000' } }, right: { style: 'thin', color: { argb: 'FF000000' } } };

你还可以将样式应用到整行或整列:

// 应用样式到整行 worksheet.getRow(1).font = { bold: true }; // 应用样式到整列 worksheet.getColumn('A').alignment = { horizontal: 'right' };

高级功能:数据验证与条件格式

数据验证

数据验证可以帮助确保用户输入的数据符合特定的规则。ExcelJS支持多种数据验证类型:

// 设置整数验证 worksheet.getCell('A1').dataValidation = { type: 'whole', operator: 'between', formulae: [1, 100], showErrorMessage: true, errorTitle: '输入错误', error: '请输入1到100之间的整数' }; // 设置列表验证 worksheet.getCell('B1').dataValidation = { type: 'list', formulae: ['"选项1,选项2,选项3"'], showDropDown: true };

条件格式

条件格式可以根据单元格的值自动应用不同的样式:

// 大于100的单元格显示为红色 worksheet.getCell('C1').conditionalFormatting = { rules: [ { type: 'cellIs', operator: 'greaterThan', formulae: ['100'], style: { font: { color: { argb: 'FFFF0000' } } } } ] }; // 数据条 worksheet.getCell('D1').conditionalFormatting = { rules: [ { type: 'dataBar', direction: 'leftToRight', color: { argb: 'FF00FF00' }, showValue: true } ] };

性能优化:处理大型Excel文件

当处理大型Excel文件时,内存占用和性能可能会成为问题。ExcelJS提供了流式API来解决这个问题:

流式写入

const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: '大型文件.xlsx' }); const worksheet = workbook.addWorksheet('大型数据表'); // 设置列 worksheet.columns = [ { header: 'ID', key: 'id', width: 10 }, { header: '名称', key: 'name', width: 30 }, { header: '值', key: 'value', width: 15 } ]; // 生成大量数据 for (let i = 1; i <= 100000; i++) { worksheet.addRow({ id: i, name: `项目 ${i}`, value: Math.random() * 1000 }).commit(); } worksheet.commit(); workbook.commit() .then(() => { console.log('大型文件生成完成'); }) .catch(err => { console.error('生成文件时出错:', err); });

流式读取

const workbook = new ExcelJS.stream.xlsx.WorkbookReader('大型文件.xlsx'); let rowCount = 0; workbook.on('worksheet', worksheet => { console.log('工作表名称:', worksheet.name); worksheet.on('row', row => { rowCount++; // 处理行数据 if (rowCount % 10000 === 0) { console.log(`已处理 ${rowCount} 行`); } }); worksheet.on('done', () => { console.log(`工作表 ${worksheet.name} 处理完成`); }); }); workbook.read() .then(() => { console.log(`所有工作表处理完成,共处理 ${rowCount} 行`); }) .catch(err => { console.error('读取文件时出错:', err); });

实际应用场景

ExcelJS可以应用于多种场景,例如:

  1. 报表生成:根据数据库数据动态生成Excel报表。
  2. 数据导入导出:提供Web应用中的Excel数据导入导出功能。
  3. 数据处理与分析:读取Excel数据进行分析和处理。
  4. 模板生成:基于模板创建标准化的Excel文件。

以下是一个简单的数据导入导出示例:

// 导出数据到Excel function exportToExcel(data, filename) { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('数据'); // 设置表头 if (data.length > 0) { worksheet.addRow(Object.keys(data[0])); // 添加数据 data.forEach(item => { worksheet.addRow(Object.values(item)); }); } return workbook.xlsx.writeBuffer().then(buffer => { const blob = new Blob([buffer], { type: 'application/octet-stream' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); }); } // 导入Excel数据 function importFromExcel(file) { const workbook = new ExcelJS.Workbook(); return workbook.xlsx.read(file) .then(() => { const worksheet = workbook.getWorksheet(1); const data = []; let headers = []; worksheet.eachRow((row, rowNumber) => { if (rowNumber === 1) { headers = row.values; } else { const rowData = {}; row.values.forEach((value, colNumber) => { if (colNumber > 0 && headers[colNumber]) { rowData[headers[colNumber]] = value; } }); data.push(rowData); } }); return data; }); }

总结与展望

ExcelJS是一个功能强大且灵活的库,为JavaScript开发者提供了处理Excel文件的全方位解决方案。无论是简单的数据读写,还是复杂的格式设置和数据处理,ExcelJS都能胜任。

通过本文的介绍,你应该已经掌握了ExcelJS的基本用法和一些高级功能。但ExcelJS的功能远不止于此,还有许多高级特性等待你去探索,如图表、数据透视表等。

随着Web技术的发展,ExcelJS也在不断进化。未来,我们可以期待它提供更多的功能和更好的性能,成为Web端Excel处理的首选库。

现在,是时候动手尝试使用ExcelJS来解决你实际工作中的Excel处理问题了。无论是创建复杂的报表,还是实现数据的导入导出,ExcelJS都将成为你的得力助手。

如果你觉得本文对你有帮助,请点赞、收藏并关注我们,以获取更多关于ExcelJS和其他前端技术的实用教程。你在使用ExcelJS时有什么心得或问题吗?欢迎在评论区留言分享!

【免费下载链接】exceljsExcel Workbook Manager项目地址: https://gitcode.com/gh_mirrors/ex/exceljs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/951494/

相关文章:

  • 终极LevelDB GUI管理工具:LevelUI实战指南
  • 医药企业如何选择和使用外勤软件系统 - 数智AI前沿
  • 智能考核系统落地失败率高达67%?(2024权威调研白皮书首发:AI+HR考核整合的7个生死关卡)
  • 【紧急预警】2024年档案AI化窗口期仅剩11个月!国家档案局新规倒逼下的3类机构迁移时间表与风险熔断机制
  • ExcelJS错误处理终极指南:7个常见问题与解决方案
  • 顺手填个配置,秒知你的电脑能跑啥AI大模型
  • 基于Arduino的智能手势交互系统:从电容触摸到蓝牙通信的完整实现
  • 2026年光模块GEO优化公司哪家好?实测五大服务商核心能力与选型指南 - GEO优化
  • AI测试入门:什么是人工智能(AI)模型?2026新手第一课
  • 转行学农机维修培训 高口碑正规培训机构选这家 - 湖南阳光技术
  • Windows 11系统优化神器:Win11Debloat一键清理让电脑性能飙升
  • RAG向量检索:智能体项目中不可或缺的知识库
  • 2026年厦门救护车推荐:120急救车/医院救护车/医用救护车与工厂学校紧急救援车优选 - 品牌企业推荐师(官方)
  • 10分钟掌握ExcelJS:Node.js电子表格处理终极指南
  • 泊松过程不只是数学:在Redis缓存失效、微服务熔断与消息队列中的实战思考
  • WarcraftHelper终极指南:5分钟彻底解决魔兽争霸3现代兼容性问题
  • 如何快速掌握ExcelJS中VmlNotesXform:从XML处理到注释渲染的完整指南
  • 从弛张振荡器到恒流驱动:手把手打造3W LED螺旋氛围灯
  • 如何用WanVideo_comfy实现文本转视频?T2V功能快速上手教程
  • Streamlit:智能体项目的轻量前端神器
  • 2026年 环保设备厂家/厂家推荐榜:覆盖重庆家具厂、福建木作厂、贵州工业净化/除尘/废气/喷淋净化/固废处理等环保设备源头工厂与一体化节能设备优选! - 品牌企业推荐师(官方)
  • GPT-5.5 nano实战指南:32K上下文与DTR机制深度解析
  • 实操题
  • AI工具与智能上市整合:为什么92%的Pre-IPO企业还在用Excel做底稿?3步切换合规智能工作流
  • 揭秘ExcelJS中的RelationshipsXform:轻松掌握Excel关系XML处理的核心技术
  • 旧滑板改造LED台灯:从电路原理到创意制作的完整指南
  • KEIL工程移植后,那个烦人的红色叉号怎么消?手把手教你修改UVCC.ini文件
  • Python基础 - 什么是模块 Python代码的组织方式
  • 【企业级AI离职防控白皮书】:92.6%的隐性离职意向可被提前17.3天识别——附可即插即用的LLM分析模板
  • 传统安防如何做GEO?2026年头部AI搜索优化服务商实力与选型全解析 - GEO优化