之前的項目一直使用的是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;