Nodejs使用xlsx插件讀取和生成excel文件方式
Nodejs xlsx插件讀取和生成excel文件
最近接到一個(gè)任務(wù),領(lǐng)導(dǎo)讓比對兩個(gè) excel 文件中指定列的數(shù)據(jù),如果有一樣的,篩選出來整理到新的 excel 中,由于需要對比的文件有幾十個(gè),每個(gè)文件的數(shù)據(jù)量還很大,所以,就想到用腳本處理,于是整理了如下筆記。
安裝 xlsx 插件
npm install xlsx
創(chuàng)建 operateExcel.js 文件
//引入 xlsx 插件
const xlsx = require('xlsx')
/**
* 讀取excel中的數(shù)據(jù),并以json格式輸出
* @param {string} filePath 文件所在路徑
*/
function readFile(filePath){
const fileContent = xlsx.readFile(filePath); // 讀取excel文件
const name = fileContent.SheetNames[0] // 獲取excel第一張sheet的名字
const sheet = fileContent.Sheets[name] // 獲取excel第一張sheet中的數(shù)據(jù)
const jsonData = xlsx.utils.sheet_to_json(sheet) // 將數(shù)據(jù)轉(zhuǎn)成 json 格式
return jsonData
}
/**
* 將json數(shù)據(jù)寫入并生成excel文件
* @param {string} filePath 路徑
* @param {Array} jsonData 數(shù)據(jù)
* @param {string} sheetName 表格名字, 默認(rèn) Sheet1
*/
function writeFile(filePath, jsonData, sheetName='Sheet1'){
const excleBook = xlsx.utils.book_new() // 新建文件
xlsx.utils.book_append_sheet(excleBook, xlsx.utils.json_to_sheet(jsonData), sheetName); // 向文件中添加sheet,并將數(shù)據(jù)寫入sheet
xlsx.writeFile(excleBook, filePath); // 輸出文件
}
const jsonData = readFile('C:/Users/xxxx/Desktop/test/test.xlsx')
writeFile('C:/Users/xxxx/Desktop/test/test01.xlsx',jsonData) test.xlsx 文件如圖:

在node環(huán)境下,在 operateExcel.js 文件所在目錄打開cmd命令窗口,執(zhí)行如下命令,即可運(yùn)行:
node operateExcel.js
調(diào)用 readFile 函數(shù)輸出 json 數(shù)據(jù)
如圖:

調(diào)用 writeFile 方法
將 test.xlsx 中讀取的 json 數(shù)據(jù)寫入并生成到 test01.xlsx 文件中,結(jié)果如圖:

下面是比對文件完整示例
//引入 xlsx 插件
const xlsx = require('xlsx')
/**
* 讀取excel中的數(shù)據(jù),并以json格式輸出
* @param {string} filePath 文件所在路徑
*/
function readFile(filePath){
const fileContent = xlsx.readFile(filePath); // 讀取excel文件
const name = fileContent.SheetNames[0] // 獲取excel第一張sheet的名字
const sheet = fileContent.Sheets[name] // 獲取excel第一張sheet中的數(shù)據(jù)
const jsonData = xlsx.utils.sheet_to_json(sheet) // 將數(shù)據(jù)轉(zhuǎn)成 json 格式
return jsonData
}
/**
* 將json數(shù)據(jù)寫入并生成excel文件
* @param {string} filePath 路徑
* @param {Array} jsonData 數(shù)據(jù)
* @param {string} sheetName 表格名字, 默認(rèn) Sheet1
*/
function writeFile(filePath, jsonData, sheetName='Sheet1'){
// 新建文件
const excleBook = xlsx.utils.book_new()
// 向文件中添加sheet,并將數(shù)據(jù)寫入sheet
xlsx.utils.book_append_sheet(excleBook, xlsx.utils.json_to_sheet(jsonData), sheetName);
xlsx.writeFile(excleBook, filePath); // 輸出文件
}
//讀取test01文件中的數(shù)據(jù)
const jsonData01 = readFile('C:/Users/xxxx/Desktop/test/test01.xlsx')
//讀取test02文件中的數(shù)據(jù)
const jsonData02 = readFile('C:/Users/xxxx/Desktop/test/test02.xlsx')
//通過遍歷jsonData01,獲取test01文件中的姓名列的數(shù)據(jù),這里idArr是姓名列的數(shù)據(jù)組成的數(shù)組
const idArr=jsonData01.map(v=>v['姓名'])
//這里將文件test02與test01中的姓名列進(jìn)行對比,如果文件test02中的姓名在文件test01中,則篩選出來
const newJsonData = jsonData02.filter(v=>idArr.includes(v['姓名']))
//生成test文件,并將篩選出來的數(shù)據(jù)寫入到test文件中
writeFile('C:/Users/xxxx/Desktop/test/test.xlsx',newJsonData) 總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs將JSON字符串轉(zhuǎn)化為JSON對象報(bào)錯(cuò)的解決
這篇文章主要介紹了nodejs將JSON字符串轉(zhuǎn)化為JSON對象報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Node.js前后端交互實(shí)現(xiàn)用戶登陸的實(shí)踐
本文主要介紹了Node.js前后端交互實(shí)現(xiàn)用戶登陸的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
關(guān)于Node.js的events.EventEmitter用法介紹
本篇文章主要介紹了關(guān)于Node.js的events.EventEmitter用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能實(shí)例
前端一直是一塊充滿驚喜的土地,不僅是那些富有創(chuàng)造性的頁面,還有那些驚贊的效果及不斷推出的新技術(shù),下面這篇文章主要給大家介紹了關(guān)于如何基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能的相關(guān)資料,需要的朋友可以參考下2023-05-05

