使用 Excel.js 处理 Excel 文件


要使用 Excel.js,您需要先将其作为依赖项安装到项目中。要将 Excel.js 安装到项目中,您需要运行以下命令 −

npm install exceljs

运行上述命令后,会将 Excel.js 作为依赖项安装到您的项目中。

本教程中使用的所有示例中,我们都将使用“xlsx”文件,即 Microsoft Excel 中使用的开放 XML 电子表格文件。

使用 ExcelJS 单元格

在下面所示的示例中,我们使用 Excel 表格单元格。要获取特定单元格的引用,我们可以使用 getCell 函数。

请考虑以下代码。

// Read Simple Cell Values

const Excel = require('exceljs');
const wb = new Excel.Workbook();
const ws = wb.addWorksheet('My Sheet');

ws.addRows([
   [10, 2, 3, 4, 5],
   [6, 11, 8, 9, 10],
   [10, 11, 12, 14, 15],
   [16, 17, 18, 13, 20]]
);

const valueOne = ws.getCell('B1').value;
console.log(valueOne);

const valueTwo = ws.getCell(1, 1).value;
console.log(valueTwo);

const valueThree = ws.getRow(3).getCell(3).value;
console.log(valueThree);

这里,我向工作表中添加数据,然后借助 getCell 函数从单元格中读取该数据。

有几个重点需要注意,首先,我们使用以下代码片段生成一个新的工作簿。

const wb = new Excel.Workbook();

现在,我们需要在此 Excel 文件中添加一个新的工作表,为此,我们使用以下代码片段。

const ws = wb.addWorksheet('My Sheet');

现在,作为下一步,借助 **addRows** 向工作表中添加数据,然后使用 **getCell()** 函数提取不同单元格的值。

输出

运行此代码时,会生成以下输出 −

2
10
12

写入 Excel 文件

在此示例中,我们将数据写入 Excel 文件。考虑如下所示的代码。

const Excel = require('exceljs');
const fileName = 'myexcel.xlsx';

const wb = new Excel.Workbook();
const ws = wb.addWorksheet('My Sheet');

ws.getCell('A1').value = 'Mukul Latiyan';
ws.getCell('B1').value = 'Software Developer';
ws.getCell('C1').value = new Date().toLocaleString();

const r3 = ws.getRow(3);
r3.values = [1, 2, 3, 4];

wb.xlsx
   .writeFile(fileName)
   .then(() => {
      console.log('file created');
   })
   .catch(err => {
      console.log(err.message);
   });

在此示例中,我们使用 **excel.js** 创建名为 **“myexcel.js”** 的 Excel 文件。然后,我们将一个名为 **“我的工作表”** 的新工作表添加到 Excel 文件中。最后,在 **“我的工作表”** 的不同单元格位置插入不同的值。

在第一个示例中,我们一次向一个单元格添加值,然后使用整行添加值,最后插入包含不同整数作为值的数组。

在此,一旦向工作表添加值,下一步就是能够在我们的计算机中创建文件,为此,我们使用 **writeFile()** 方法。

运行此代码时,它将创建一个名为 **“myexcel.xlsx”** 的 Excel 文件,在此文件中,将包含我们已插入的所有数据。

从 Excel 文件中读取数据

在此示例中,我们将尝试从 Excel 文件中读取数据,为此,第一步是使用 **readFile()** 方法,然后我们需要获取工作表的名称,然后简单地使用 **getColumn()** 方法。当我们能够获取特定方法时,下一步就是简单地遍历该列,我们可以借助 **eachCell()** 方法来完成此操作。

请考虑以下代码。

const Excel = require('exceljs');
const wb = new Excel.Workbook();
const fileName = 'myexcel.xlsx';

wb.xlsx.readFile(fileName).then(() => {

   const ws = wb.getWorksheet('My Sheet');
   c1.eachCell(c => {
      console.log(c.value);
   });

   const c2 = ws.getColumn(2);
   c2.eachCell(c => {
      console.log(c.value);
   });
}).catch(err => {
   console.log(err.message);
});

**eachCell()** 方法将帮助我们遍历特定列的单元格值,然后我们可以打印这些每个单元格的值。

在上面的示例中,我们在两列上使用 **eachCell()** 函数,即 **“column 1”** 和 **“column 2”**,然后打印这些列中存在的所有值。

输出

运行此代码时,会生成以下输出 −

Mukul Latiyan
1
Software Developer
2

使用列

现在,让我们了解一个更复杂的示例,在此示例中,我们将 JSON 数据数组添加到列中,然后还将添加多行,然后使用 **getColumn()** 和 **eachCell()** 方法获取一列的每个单元格的值。

请考虑以下代码。

const Excel = require('exceljs');

const wb = new Excel.Workbook();
const ws = wb.addWorksheet('My Sheet');

const headers = [{
   header: 'First name',
   key: 'fn',
   width: 15
},
{
   header: 'Last name',
   key: 'ln',
   width: 15
},
{
   header: 'Occupation',
   key: 'occ',
   width: 15
},
{
   header: 'Salary',
   key: 'sl',
   width: 15
},
]

ws.columns = headers;

ws.addRow(['Mukul', 'Latiyan', 'Software Developer', 1230]);
ws.addRow(['Prince', 'Yadav', 'Driver', 980]);
ws.addRow(['Mayank', 'Agarwal', 'Maali', 770]);

ws.getColumn('fn').eachCell((cell, rn) => {
   console.log(cell.value);
});

console.log('--------------');

ws.getColumn('B').eachCell((cell, rn) => {
   console.log(cell.value);
});

console.log('--------------');

ws.getColumn(3).eachCell((cell, rn) => {
   console.log(cell.value);
});

console.log('--------------');
console.log(`There are ${ws.actualColumnCount} columns`);

在此代码中,我们创建了一个名为 **headers** 的数组,其中包含不同的对象,在每个对象中,我们定义 **header**、**key** 和 **width**,因为这些字段将定义特定单元格的属性,然后我们将此 **headers** 数组分配给 **columns**。

之后,我们将多行添加到这些列,然后在稍后访问每一列,然后使用 **eachCell()** 方法从特定单元格获取值。

输出

运行此代码时,它将在终端上生成以下输出 −

First name
Mukul
Prince
Mayank
--------------
Last name
Latiyan
Yadav
Agarwal
--------------
Occupation
Software Developer
Driver
Maali
--------------
There are 4 columns

使用行

现在,让我们看看如何在 Excel 上使用特定于行的各个方法。考虑如下所示的代码。

const Excel = require('exceljs');

const wb = new Excel.Workbook();
const ws = wb.addWorksheet('My Sheet');

const headers = [{
   header: 'First name',
   key: 'fn',
   width: 15
},
{
   header: 'Last name',
   key: 'ln',
   width: 15
},
{
   header: 'Occupation',
   key: 'occ',
   width: 15
},
{
   header: 'Salary',
   key: 'sl',
   width: 15
},
]

ws.columns = headers;

ws.addRow(['Mukul', 'Latiyan', 'Software Developer', 1230]);
ws.addRow(['Prince', 'Yadav', 'Driver', 980]);
ws.addRow(['Mayank', 'Agarwal', 'Maali', 770]);

console.log(`There are ${ws.actualRowCount} rows`);

let rows = ws.getRows(1, 4).values();

for (let row of rows) {
	row.eachCell((cell, cn) => {
    	console.log(cell.value);
	});
	console.log('--');
}

输出

运行此代码时,它将在终端上生成以下输出 −

There are 4 rows
First name
Last name
Occupation
Salary
--
Mukul
Latiyan
Software Developer
1230
--
Prince
Yadav
Driver
980
--
Mayank
Agarwal
Maali
770
--

结论

在本教程中,我们了解了如何借助 **Excel.js** 使用 excel 文件来从单元格、行和列提取值。

更新于:2023 年 6 月 22 日

4K+ 阅读次数

启动你的职业生涯

完成课程并获取认证

立即开始
广告