在Node.js中利用xlsx与exceljs库处理Excel数据与提取图片
在日常软件开发中,处理Excel文件是一项常见任务,涵盖从读取数据到提取嵌入的图片等多个方面。Node.js环境提供了诸如xlsx和exceljs这样的优秀库,使得开发者能够高效、便捷地应对这些需求。本文将详细介绍如何运用这两个库来读取Excel数据以及提取其中的图片。
一、读取Excel数据
1. 使用xlsx
库
首先,需要将Excel文件读取为ArrayBuffer
对象。一旦有了这个ArrayBuffer对象,就可以使用xlsx
库的read
方法将其解析为一个工作簿对象。
const XLSX = require('xlsx');
function parseExcelData(arrayBuffer) {
const workbook = XLSX.read(arrayBuffer, { type: 'array' });
// 获取第一个工作表
const sheet_name_list = workbook.SheetNames;
const worksheet = workbook.Sheets[sheet_name_list[0]]; // 取第一张表
// 将工作表转换为 JSON 对象数组
const jsonData = XLSX.utils.sheet_to_json(worksheet, { defval: "" }); // defval 用于指定空单元格的默认值
// 处理导入的数据
this.processImportedData(jsonData);
}
在这个过程中:
- 使用
read
方法解析ArrayBuffer
得到工作簿对象。 - 通过
SheetNames
属性获取所有工作表名称列表。 - 选取第一个工作表(通常是第一个元素)并取得对应的工作表对象。
- 使用
sheet_to_json
方法将工作表对象转换为JSON对象数组,其中每个对象代表一行数据,各单元格的值作为对象的属性。
二、提取Excel中的图片
使用exceljs
库
为了提取Excel文件中的图片,我们需要创建一个exceljs
工作簿对象,加载Excel文件,并访问工作表的图片数据。
async function extractImageFromExcel(file) {
const workbook = new ExcelJS.Workbook();
await workbook.xlsx.load(file);
const sheet = workbook.getWorksheet(1); // 假设使用第一个工作表
if (!sheet._media || sheet._media.length === 0) {
throw new Error('No images found in the worksheet.');
}
const base64Images = [];
sheet._media.forEach(async (media) => {
const imageBuffer = await workbook.getImage(media.imageId);
const base64Image = imageBuffer.buffer.toString('base64');
base64Images.push(base64Image);
// 这里可以对base64Image进行处理,例如上传至服务器
});
return base64Images;
}
关键步骤如下:
- 创建并加载工作簿对象。
- 获取指定工作表对象。
- 检查工作表是否有图片数据(通过
_media
属性)。 - 遍历图片数据,使用
getImage
方法获取图片的原始二进制数据,并将其转换为Base64字符串。 - 收集所有Base64字符串到数组中,供后续使用。
注意事项:
exceljs
库中的_media
属性是私有属性,其名称和行为可能会随着库版本的更新而发生变化。在实际使用时,请查阅最新官方文档或源码,确保使用正确的API。
结语
通过合理利用xlsx
和exceljs
这两个库,开发者能够在Node.js环境中轻松处理Excel文件中的数据及嵌入的图片。无论是处理复杂的数据结构,还是处理多媒体内容,这两个库都提供了强大而灵活的功能,极大地简化了Excel文件的操作过程,提升了开发效率。在实际项目中,可以根据具体需求选择合适的库或结合两者的优势,以实现最佳的解决方案。