zoukankan      html  css  js  c++  java
  • 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)
        }
    })
  • 相关阅读:
    bash:加减乘除(bc、let)
    shell配置文件
    HDU4624 Endless Spin 【最大最小反演】【期望DP】
    SPOJ10707 COT2
    HDU5977 Garden of Eden 【FMT】【树形DP】
    Codeforces1023E Down or Right 【贪心】
    Codeforces1023F Mobile Phone Network 【并查集】【最小生成树】
    UOJ272 [清华集训2016] 石家庄的工人阶级队伍比较坚强 【分治乘法】
    LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】
    UOJ268 [清华集训2016] 数据交互 【动态DP】【堆】【树链剖分】【线段树】
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/12423187.html
Copyright © 2011-2022 走看看