node.js 15 如何操作Excel文件

上一篇:


node.js 15 如何操作Excel文件

nodejs excel操作

絕大部分編程語言都有Office文件的操作庫,nodejs也不例外。而且nodejs的世界裡,Excel操作模塊還是比較多的,這就涉及到選擇問題了。到底選哪個Excel操作模塊?

Excel操作模塊PK

讓我們看一下npm包裡面的各類Excel操作模塊

  • ExcelJS

最近更新在4天前,也就是2020年3月份更新的。最新版本3.8.2。從版本維護,文件更新方面都是有保障的。每週的下載量為12萬5797次,使用面也是比較廣的。再來看文檔方面,各類操作都有代碼,關鍵的是有中文翻譯的文檔。應該說這是一個不錯的選擇。

  • Excel

最近更新在7個月之前,大概是2019年8月份。最新版本為1.0.1。每週的下載量為4410次。除了寥寥數行代碼外,幾乎沒有什麼文檔。

  • node-xlsx

最近更新在1年前,大約是2019年初。最新版本 0.15.0。但是周下載量不錯,達到了3萬8千多次。文檔方面也相對比較完備。應該說node-xlsx也是一個不錯的選擇。

  • SheetJS js-xlsx

最近更新在13天前,也是2020年3月份。最新版本0.15.6。每週的下載量達到了55萬8千次,這個使用面是非常廣泛了。文檔也比較齊全。這是一個非常不錯的選擇。

  • ejsExcel

這是一款國人做的Excel操作模塊。最近一次更新在4個月前,也就是2019年11月。最新版本為3.6.0。但是每週下載量是這幾個模塊中最低的,只有396次。

考慮到文檔,中文,下載量,版本維護等,我選擇使用ExcelJS來作為Excel文件操作的模塊。

ExcelJS安裝

使用命令:npm install exceljs --save

<code>D:\\Projects\\nodejs\\NodeDemo\\excel>npm install exceljs --save
npm WARN deprecated [email protected]: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
+ [email protected]
added 92 packages from 115 contributors and audited 256 packages in 45.139s
2 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities/<code>

ExcelJS 代碼示例

  • 創建Workbook

首先需要引入exceljs模塊,通過Excel.Workbook()來構建Workbook。

<code>const Excel = require('exceljs')
var workbook = new Excel.Workbook();/<code>
  • 設置Workbook屬性
<code>workbook.creator = 'Vincent';
workbook.lastModifiedBy = 'Vincent';
workbook.created = new Date(2020, 3, 28);
workbook.modified = new Date();
workbook.lastPrinted = new Date(2020, 3, 28);/<code>
  • 添加Worksheet
<code>workbook.addWorksheet('My Sheet')/<code>
  • 訪問Worksheet

提供三種方法,可以通過遍歷所有的worksheet,也可以通過worksheet名稱或者id來訪問。

<code>//遍歷所有worksheet 

workbook.eachSheet(function(worksheet, sheetId) {
// ...
});
//通過名稱訪問
var worksheet = workbook.getWorksheet('My Sheet');

//通過id訪問
var worksheet = workbook.getWorksheet(1);/<code>
  • 行操作

添加行只需要調用addRow方法並傳入數組即可。

<code>worksheet.addRow([1, 'Vincent', 18]);
worksheet.addRow([2, 'Tom', 25]);/<code>
node.js 15 如何操作Excel文件

運行結果

獲取行信息,需要調用worksheet.getRow(index).values方法。

<code>var row = worksheet.getRow(1).values;/<code>

該代碼可以獲取第一行的值,返回值為數組。

  • 列操作
<code>//設定列
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10,}
];

//獲取列
var idCol = worksheet.getColumn('id');
var nameCol = worksheet.getColumn('B');
var dobCol = worksheet.getColumn(3);

//添加數組到列中
worksheet.getColumn(6).values = [1,2,3,4,5];/<code>
  • 單元格操作
<code>//獲取單元格
var cell = worksheet.getCell('C3');

// 設定單元格value
cell.value = 'Vincent'

//合併單元格
worksheet.mergeCells('A4:B5');

//獲取單元格value
worksheet.getCell('B5').value


//獲取單元格註釋
worksheet.getCell('A1').note

//設定單元格註釋
worksheet.getCell('A1').note='單元格註釋'/<code>
  • 公式 Formula
<code>//單元格公式以及計算值設定
worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 };/<code>

注意,上面如果只是設定formula不設定result是不起作用的。經過實際測試,result可以不一定是百分百正確的計算值。當寫入文件後,打開excel時,excel會自動通過公式計算並顯示正確值。

  • 讀取xlsx文件
<code>// read from a file
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename)
.then(function() {
// use workbook
});/<code>
  • 寫入Excel文件
<code>// write to a file
var workbook = createAndFillWorkbook();
workbook.xlsx.writeFile(filename)
.then(function() {
// done
});/<code>

總體ExcelJS模塊的API是比較豐富的,可以應對絕大部分Excel操作。並且文檔相對比較詳細。

如果朋友們有什麼問題,歡迎留言討論。


分享到:


相關文章: