想用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)
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/144305.html
標籤:JavaScript
