您现在的位置:首页 >> 网页设计 >> JavaScript >> 内容

nodejs的xlsx模块批量解析与导出excel数据表简单使用

时间:2020-3-25 9:33:19

  核心提示:想用nodejs的xlsx模板实现一个小功能,可以批量解析多个excel表,且能对其中的数据进行操作后,导出新表。主要实现功能为将多个表,每个表多个sheet中的具体一列数据由加密变成解密,这里主要是...

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

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号