Nodejs使用exceljs实现excel导入导出

 更新时间:2024年03月18日 09:35:29   作者:云牧  
在日常开发中,我们常需在后台管理系统中实现数据的导入与导出功能,以便与?Excel?文件进行交互,本文将使用使用exceljs实现excel导入导出功能,需要的可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Excel 数据处理简介

Excel 是广泛应用于办公场景的数据处理软件。

在日常开发中,我们常需在后台管理系统中实现数据的导入与导出功能,以便与 Excel 文件进行交互。

使用 exceljs 库进行 excel 数据处理

exceljs 简介

在 Node.js 环境和浏览器中,我们常用 exceljs 这个包来解析和生成 Excel 文件。该包在 npm 官网上每周有超过 30 万的下载量,足见其受欢迎程度。

环境搭建

mkdir exceljs-test
cd exceljs-test
npm init -y

安装 exceljs:

npm install exceljs

新建 data.xlsx:

从 Excel 文件读取数据

工作表结构遵循层级关系:workbook(工作簿)> worksheet(工作表)> row(行)> cell(单元格)。通过遍历这些层级,我们可以获取所有数据:

// 引入 exceljs 库
const { Workbook } = require('exceljs');

// 异步函数读取 Excel 文件
async function main() {
	// 创建一个Workbook实例,用于处理Excel文件
	const workbook = new Workbook();

	// 从指定路径读取Excel文件
	const dataBook = await workbook.xlsx.readFile('./data.xlsx');

	// 遍历Excel中的每个工作表
	dataBook.eachSheet((sheet, index1) => {
		console.log('工作表 ' + index1);

		// 遍历每个工作表中的每行数据
		sheet.eachRow((row, index2) => {
			const rowData = []; // 用于存储当前行的数据

			row.eachCell((cell, index3) => {
				// 遍历当前行的每个单元格,并将值存储到rowData数组中
				rowData.push(cell.value);
			});

			console.log('行 ' + index2, rowData);
		});
	});
}

main();

node 运行:

我们已经解析出 excel 数据了。

exceljs 还提供了简便的方法,可以直接调用 worksheet 的 getSheetValues 来拿到表格数据,不用自己遍历:

这就是解析 excel 文件。

导入数据的时候,按照格式从中解析数据然后存入数据库就行。

一般我们都会提供一个 excel 模版,用这个模版来填数据,然后再导入。

数据导出

使用 exceljs 进行数据导出:

const { Workbook } = require('exceljs');

async function main() {
	// 创建一个新的工作簿
	const workbook = new Workbook();
	// 添加一个新的工作表,命名为'hong'
	const worksheet = workbook.addWorksheet('hong');

	// 定义工作表的列结构
	worksheet.columns = [
		{ header: 'ID', key: 'id', width: 20 },
		{ header: '姓名', key: 'name', width: 40 },
		{ header: '年龄', key: 'age', width: 20 },
	];

	// 数据数组,用于填充工作表
	const data = [
		{ id: 1, name: '探春', age: 18 },
		{ id: 2, name: '迎春', age: 19 },
		{ id: 3, name: '惜春' },
	];

	// 向工作表中添加数据行
	worksheet.addRows(data);

	// 将工作簿保存为Excel文件
	workbook.xlsx.writeFile('./data2.xlsx');
}

main();

运行后产生的 data2.xlsx 如下:

我们可以遍历行和列,对特定单元格进行样式设置,如字体、背景色、边框等。

比如通过 cell.style 可以设置 font、fill、border、alignment 这些。

在浏览器中使用 ExcelJS 库解析 Excel 文件

创建 index.html,引入 exceljs 包:

<!DOCTYPE html>
<html lang="en">
	<head>
		<!-- 加载ExcelJS库 -->
		<script src="http://9i0i.com/pic.php?p=https://unpkg.com/exceljs@4.4.0/dist/exceljs.min.js"></script>
	</head>
	<body>
		<!-- 文件选择输入框 -->
		<input id="fileInput" type="file" />

		<script>
			const fileInput = document.getElementById('fileInput');

			// 文件选择变化时的处理逻辑
			fileInput.onchange = async () => {
				// 获取选中的文件
				const file = fileInput.files[0];

				const { Workbook } = ExcelJS;

				const workbook = new Workbook();

				const loadedWorkbook = await workbook.xlsx.load(file);

				loadedWorkbook.eachSheet((sheet, index1) => {
					console.log('工作表' + index1);

					const value = sheet.getSheetValues();

					console.log(value);
				});
			};
		</script>
	</body>
</html>

启动静态服务器:

npx http-server .

同样解析出了 excel 的内容。

在浏览器中使用 ExcelJS 库生成 Excel 文件并下载

然后再试试生成 excel:

这里我创建了一个 10M 的 ArrayBuffer 来写入数据,之后再读取。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<script src="http://9i0i.com/pic.php?p=https://unpkg.com/exceljs@4.4.0/dist/exceljs.min.js"></script>
	</head>
	<body>
		<script>
			const { Workbook } = ExcelJS;

			async function main() {
				// 创建一个新的工作簿
				const workbook = new Workbook();
				// 添加一个新的工作表,命名为'hong'
				const worksheet = workbook.addWorksheet('hong');

				// 定义工作表的列结构
				worksheet.columns = [
					{ header: 'ID', key: 'id', width: 20 },
					{ header: '姓名', key: 'name', width: 40 },
					{ header: '年龄', key: 'age', width: 20 },
				];

				// 数据数组,用于填充工作表
				const data = [
					{ id: 1, name: '宝玉', age: 18 },
					{ id: 2, name: '宝钗', age: 19 },
					{ id: 3, name: '黛玉' },
				];

				worksheet.addRows(data);

				// 将工作簿写入 ArrayBuffer 并下载
				const buffer = new ArrayBuffer(10 * 1024 * 1024); // 分配足够大的内存空间
				const res = await workbook.xlsx.writeBuffer(buffer);

				download(res.buffer);
			}

			function download(arrayBuffer) {
				const link = document.createElement('a');

				// 创建 Blob 对象并生成 URL
				const blob = new Blob([arrayBuffer]);
				const url = URL.createObjectURL(blob);
				link.href = url;
				// 设置下载的文件名
				link.download = 'honglou.xlsx';

				// 插入链接到页面并触发点击下载
				document.body.appendChild(link);

				link.click();
				// 下载完成后移除链接
				link.addEventListener('click', () => {
					link.remove();
				});
			}

			main();

			// 在页面加载完毕后执行
			window.onload = generateExcel;
		</script>
	</body>
</html>

和前面的逻辑一样,只是把 writeFile 换成了 writeBuffer。

在浏览器中打开 index.html,Excel 文件将自动生成并下载:

到此这篇关于Nodejs使用exceljs实现excel导入导出的文章就介绍到这了,更多相关Nodejs excel导入导出内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • Node.js中HTTP模块与事件模块详解

    Node.js中HTTP模块与事件模块详解

    这篇文章主要详细介绍了Node.js中HTTP模块与事件模块的相关资料,需要的朋友可以参考下
    2014-11-11
  • 在Node.js中使用Swagger自动生成API接口文档

    在Node.js中使用Swagger自动生成API接口文档

    这篇文章主要给大家介绍了如何在Node.js项目中使用 Swagger 来自动生成 API接口文档,使用生成方式有很多种,本文基于swagger-jsdoc+swagger-ui-express快速实现,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • node制作一个视频帧长图生成器操作分享

    node制作一个视频帧长图生成器操作分享

    这篇文章主要介绍了node制作一个视频帧长图生成器操作分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • require加载器实现原理的深入理解

    require加载器实现原理的深入理解

    这篇文章主要给大家介绍了关于require加载器实现原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • node版本太高导致项目跑不起来的解决办法(windows)

    node版本太高导致项目跑不起来的解决办法(windows)

    换了台电脑后,安装node,一切完美,发现其中有一个uniapp的小程序项目跑不起来,感觉是node版本太高导致的,所以只能重新安装低版本的node,本文给大家介绍了node版本太高的解决办法,需要的朋友可以参考下
    2023-10-10
  • NodeJS实现微信公众号关注后自动回复功能

    NodeJS实现微信公众号关注后自动回复功能

    这篇文章主要为大家详细介绍了NodeJS实现微信公众号关注后自动回复功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Node.js中的package.json与cnpm命令行工具介绍

    Node.js中的package.json与cnpm命令行工具介绍

    这篇文章介绍了Node.js中的package.json与cnpm命令行工具,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • linux服务器快速卸载安装node环境(简单上手)

    linux服务器快速卸载安装node环境(简单上手)

    这篇文章主要介绍了linux服务器快速卸载安装node环境(简单上手),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • node?NPM库glob通配符匹配文件名minimatch模式匹配字符串学习

    node?NPM库glob通配符匹配文件名minimatch模式匹配字符串学习

    这篇文章主要为大家介绍了node?NPM库glob通配符匹配文件名minimatch模式匹配字符串学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • nodejs实例解析(输出hello world)

    nodejs实例解析(输出hello world)

    本文主要介绍nodejs实例解析:输出hello world的完整过程。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论

?


http://www.vxiaotou.com