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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM