nodejs中间件xlsx.js导出excel文件使用方法封装(原创)
之前的项目一直使用的是nodejs的node-xlsx.js中间件,现在改用xlsx.js中间件。
现在把自己封装的使用方法分享出来,和大家一起学习。
代码很简单,轻喷。
/** * Created by Administrator on 2016/11/17. * 使用xlsx中间件,传入表头[数组],表内数据[对象数组],文件名[string] //var header=["姓名",'年龄','性别']; * var excel=[ {name:'z3',age:16,sex:'男'}, {name:'l4',age:20,sex:'女'}, {name:'w5',age:24,sex:'男'}, {name:'z6',age:23,sex:'女'}, {name:'ss',age:10,sex:'不男不女'} ]; var path='../web/xxx.xlsx'; */ var fs=require('fs'); var os=require('os'); var xlsx=require('xlsx'); var errors=require('../libs/errors'); var underscore = require('underscore'); function createExcel(headArr,excel,filePath,callback){ if( !headArr instanceof Array || !excel instanceof Array || typeof filePath != 'string'){ //console.log(headArr instanceof Array ,excel instanceof Array,typeof filePath); return callback("创建文件方法所需参数传递错误",null); }else{ var arrlen=headArr.length; var headObj={},//生成表头 indexObj={};//生成表内数据 for(var i=0;i<arrlen;i++){ var str=String.fromCharCode(65+i)+1; if(i>26){ str=String.fromCharCode(65)+String.fromCharCode(65+i-26)+1; } if(i>52){ return callback('表头太多,请做适当删减',null); } headObj[str]={v:headArr[i]}; } var indexArr=[]; for(var e=0;e<excel.length;e++){ for(var j=0;j<headArr.length;j++){ var index=String.fromCharCode(65+j)+(e+2); indexArr.push(index); } } //console.log(indexObj); //console.log("indexArr:",indexArr); var excelArr=[]; for(var r=0;r<excel.length;r++){ var rec=excel[r]; for(var ii in rec){ excelArr.push(rec[ii]); } } //console.log('excelArr:',excelArr); for(var i=0; i< indexArr.length;i++){ indexObj[indexArr[i]]={v:""}; } for(var ind=0; ind< indexArr.length;ind++){ var j=0; for(jj in indexObj){ if(indexArr[ind]==jj){ //console.log(jj,excelArr[i]); indexObj[jj].v=excelArr[j]; break; } j++; } } var refS='A1', refE=String.fromCharCode(65+arrlen-1)+(excel.length+1);//表中数据范围 A1:F4 var renge={ '!ref':refS+':'+refE }; var _data=underscore.extend(headObj,indexObj,renge); var wb={ SheetNames:['mySheet'], Sheets:{ 'mySheet':_data } }; //console.log(wb); xlsx.writeFile(wb,filePath); callback(null,true); } } exports.createExcel = createExcel; /* 生成excel文件在30分钟内未被下载即从服务端删除 setTimeout当服务器在3分钟内中止服务再恢复后要重新记录时间 @filename excel文件名 @callback 回调结果 */ function deleteFile(fullPath, callback) { //console.log("传递的路径为:", fullPath); return setTimeout((function () { return fs.exists(fullPath, function (exists) { if (exists) { return fs.unlink(fullPath, function (err) { if (err) { return callback(err, null); } else { return callback(null, true); } }); } else { return callback(errors.NoFileExist); } }); }), 3 * 60 * 1000); } exports.deleteFile = deleteFile;