
如何在Node.js中读取Excel文件
您是否需要使用node.js从Excel(.xlsx)电子表格中获取和分析数据?如果遇上了这种需求,那么本文将是一个解决方案。
在本文中,我将重点介绍
- 从电子表格文件中读取数据。
- 了解如何返回数据。
- 在工作簿中获取工作表的列表(名称)。
- 指定从哪个工作表获取数据。
读取文件
准备
需要安装node.js。
创建自己喜欢的任何Excel文件,下面是我将在本文中使用的简单文件的屏幕截图。我将文件命名为Data.xlsx。

我将使用Visual Studio Code(VSCode)。
- 打开终端窗口,然后输入npm init。您可以接受默认设置,该默认设置将使用index.js作为主入口文件。
- 在终端窗口中,安装 read-excel-file 软件包。
npm install read-excel-file
创建一个名为index.js的文件并打开它。
读取Excel文件
将以下代码添加到index.js文件。
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx').then((rows) => {
}
旁注:在require语句中,我们指定了/ node。这很重要,表示我们需要使用的是node版本。因为它也可以在浏览器中使用,如下:
import xlsxFile from 'read-excel-file'
代码
第一行导入包。
第二行读取文件,返回Promise。完成读取后,我们将得到一个数组。
每个数组(回调函数的rows参数)都表示在电子表格中的一行。每一个都有三个数组,分别对应于电子表格的三列。
实际上返回了一个二维数组。
查看原始数据
修改代码,查看从文件中获取的数据。
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx').then((rows) => {
console.log(rows);
console.table(rows);
})
可以使用F5在调试模式中运行此程序,也可以在不进行调试的情况下使用Ctrl + F5运行。
运行之后,我们可以看到读取的数据。

在这里,我们看到有一个包含五个元素的数组。每个元素都是文件中的一行。每行包含一个包含三个元素的数组。这三个数组对应于我们的列。二维数组。
CRTL+F5

现在可以更好的看到数组阵列结构。
获取实际数据
现在数据位于数组中,我们可以轻松访问。下面是两种获取数据的方法。
forEach循环
如下修改代码,以查看每条数据及其数据类型。
数据参数包含电子表格单元格条目。
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx').then((rows) => {
rows.forEach((col)=>{
col.forEach((data)=>{
console.log(data);
console.log(typeof data);
})
})
})
目前为止,输出只是一个列表,但是我们可以访问数据并可以验证其数据类型。

for..in循环
修改代码以使用for…in循环
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx').then((rows) => {
for (i in rows) {
for (j in rows[i]){
console.dir(rows[i][j]);
}
}
})
运行时的输出类似,但是此代码使我们可以更好地了解数组结构以及如何访问数组元素。
rows[i][j]包含每个电子表格单元格中的数据。
处理多张工作表
如果我们有两个名为Dev和Exec的工作表怎么办?
默认情况下,当我们阅读时,将首先阅读第一张表。但是我们可以
- 获取工作表名称列表
- 指定要从中获取数据的工作表。
修改后的Excel文件
修改Excel文件Data.xlsx,使其具有两张工作表。


获取工作表名称列表
工作表名称作为对象数组返回。每个对象都有结构
{name:"sheetname"}
对于我们的工作表,它将返回数组[[{name:"Dev"},{name:"Exec"}]
如下修改代码以获取工作表列表。
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx', { getSheets: true })
.then((sheets) => {
sheets.forEach((obj) => {
console.log(obj.name);
})
})
在这里,我们传递了对象参数 {getSheets: true}。
然后使用forEach循环遍历sheets数组并访问每个对象的name属性。

指定要从中获取数据的表
为了指定所需的工作表,我们将传递{sheet:xxx}对象参数。这有两种形式。您可以按工作表编号或工作表名称指定。要访问工作表2,我们可以使用以下其中一项,
{sheet:2}
{sheet:'Exec'}
如下修改代码,以访问Exec表的数据。
const xlsxFile = require('read-excel-file/node');
xlsxFile('./Data.xlsx', { sheet: 'Exec' })
.then((rows) => {
for (i in rows) {
for (j in rows[i]) {
console.log(rows[i][j]);
}
}
})

最后
npm软件包完成了读取文件的所有工作,重要的部分是如何返回数据。它以二维数组形式返回。知道这一点后,我们就可以深入了解如何获取数据并进行处理。知道我们可以获得工作表名称后,便可以根据需要处理整个工作簿。
谢谢阅读,编码愉快!