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;

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM