• 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;
    

      

  • 相关阅读:
    使用react native制作的一款网络音乐播放器
    swift3.0 简单直播和简单网络音乐播放器
    深入理解iOS开发中的BitCode功能
    react native 之 事件监听 和 回调函数
    swift简单处理调用高清大图导致内存暴涨的情况
    swift3.0 自定义键盘
    iOS原生和React-Native之间的交互2
    react native 之 获取键盘高度
    React Native项目集成iOS原生模块
    架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)
  • 原文地址:https://www.cnblogs.com/cm1236/p/6074453.html
Copyright © 2020-2023  润新知