使用 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+ 閱讀次數

啟動你的職業生涯

完成課程並獲取認證

立即開始
廣告
© . All rights reserved.