想用nodejs的xlsx模板實現一個小功能,可以批量解析多個excel表,且能對其中的數據進行操作後,導出新表。 主要實現功能為將多個表,每個表多個sheet中的具體一列數據由加密變成解密,這裡主要是base64解密,需要解析的表放在import文件夾下,需要導出的表導出到output文件夾下,實 ...
想用nodejs的xlsx模板實現一個小功能,可以批量解析多個excel表,且能對其中的數據進行操作後,導出新表。
主要實現功能為將多個表,每個表多個sheet中的具體一列數據由加密變成解密,這裡主要是base64解密,需要解析的表放在import文件夾下,需要導出的表導出到output文件夾下,實現如下:
const fs = require('fs'); const path = require('path'); const xlsx = require('xlsx'); function parseExcel(filename) { const workbook = xlsx.readFile('./import/'+filename); // 讀取excel文件 const sheetNames = workbook.SheetNames; //獲取表名稱數組 let wb = { SheetNames:[], Sheets:{} }; // 設置頭部,根據需要修改,必須加頭部,否則後面無法獲取準確結尾單元格值 let _headers = ['title1', 'title2','title3','title4'] let headers = _headers.map((v, i) => Object.assign({}, {v: v, position: String.fromCharCode(65+i) + 1 })) .reduce((prev, next) => Object.assign({}, prev, {[next.position]: {v: next.v}}), {}); for (let i = 0; i < sheetNames.length; i++) { let data =xlsx.utils.sheet_to_json(workbook.Sheets[sheetNames[i]]); //通過工具將表對象的數據讀出來並轉成json data.map((item,index)=>{ // 這裡根據具體業務來進行操作 if(item['title1']!== "xxx"){ item['title2'] = new Buffer(item['title1'],'base64').toString(); }else{ item['title2'] = ""; } }) let exportData = xlsx.utils.json_to_sheet(data); //通過工具將json轉表對象 let output = Object.assign({}, headers, exportData);//獲取表對象,包含頭 let keys = Object.keys(output);// 獲取所有的單元格名稱數組 let ref = keys[0]+':'+keys[keys.length - 2]; //定義一個字元串 也就是表的範圍,左上角:右下角 wb['SheetNames'].push(sheetNames[i]);//插入sheet名稱 wb['Sheets'][sheetNames[i]] = Object.assign({},exportData,{'!ref':ref}) //表對象,上面的sheet名稱為key,對應表對象 } // 給文件名稱加'解密' filename = filename.split('.')[filename.split('.').length-2]+'解密'+'.'+filename.split('.').pop(); xlsx.writeFile(wb,path.resolve(__dirname,'output',filename)); //將數據導出為excel文件 } //讀取某個路徑下所有文件名 var readDir = fs.readdirSync("./import"); readDir.forEach(function (filename) { let fileExtension = filename.split('.').pop().toLowerCase(); if(fileExtension === 'xlsx' || fileExtension === 'xls' ){ // 批量解析文件 parseExcel(filename) } })