nodejs的xlsx模組批量解析與導出excel數據表簡單使用

想用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)      }  })