下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:Apple     来源: https://www.cnblogs.com/beileixinqing/archive/2020/03/05/124点击数:1329发布时间: 2020-03-11 09:26:52

标签: nodejsJavascriptexcel

Web开发

  ode.js是一个基于ChromeV8引擎的Javascript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型。

  Node是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为与phpPython、Perl、Ruby等服务端语言平起平坐的脚本语言。发布于2009年5月,由RyanDahl开发,实质是对ChromeV8引擎进行了封装。

  想用nodejs的xlsx模板实现一个小功能,可以批量解析多个Excel表,且能对其中的数据进行操作后,导出新表。

  主要实现功能为将多个表,每个表多个sheet中的具体一列数据由加密变成解密,这里主要是base64解密,需要解析的表放在import文件夹下,需要导出的表导出到output文件夹下,实现如下:

  constfs=require('fs');

  constpath=require('path');

  constxlsx=require('xlsx');

  functionparseExcel(filename){

  constworkbook=xlsx.readFile('./import/'+filename);//读取excel文件

  constsheetNames=workbook.SheetNames;//获取表名称数组

  letwb={

  SheetNames:[],

  Sheets:{}

  };

  //设置头部,根据需要修改,必须加头部,否则后面无法获取准确结尾单元格值

  let_headers=['title1','title2','title3','title4']

  letheaders=_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(leti=0;i<sheetNames.length;i++){

  letdata=xlsx.utils.sheet_to_json(workbook.Sheets[sheetNames[i]]);//通过工具将表对象的数据读出来并转成json

  data.map((item,index)=>{//这里根据具体业务来进行操作

  if(item['title1']!=="xxx"){

  item['title2']=newBuffer(item['title1'],'base64').toString();

  }else{

  item['title2']="";

  }

  })

  letexportData=xlsx.utils.json_to_sheet(data);//通过工具将json转表对象

  letoutput=Object.assign({},headers,exportData);//获取表对象,包含头

  letkeys=Object.keys(output);//获取所有的单元格名称数组

  letref=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文件

  }

  //读取某个路径下所有文件名

  varreadDir=fs.readdirSync("./import");

  readDir.forEach(function(filename){

  letfileExtension=filename.split('.').pop().toLowerCase();

  if(fileExtension==='xlsx'||fileExtension==='xls'){

  //批量解析文件

  parseExcel(filename)

  }

  })

  Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。Node是一个基于Chrome JavaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。Node使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

赞(11)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程