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) } })
分类:
nodejs
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2019-03-05 babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效
2019-03-05 swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
2017-03-05 javaScript实现归并排序
2017-03-05 js插入节点appendChild和insertBefore
2017-03-05 JS的事件冒泡和事件捕获
2017-03-05 js 停止事件冒泡 阻止浏览器的默认行为
2017-03-05 事件绑定的几种常见方式