Extjs在线进销存-通用Excel导出

我们先来看看在  “ez进销存” 中excel到导出功能:如图

 

所谓通用Excel导出,就是 将GrrdPanel 中的列的信息 和 数据 (store)以Json的形式 传递到后台,后台根据列信息和json 在excel 模板中生成导出的实际数据然后提供链接给客户下载。

 

优点: 针对所以GridPanel 都可以通用,并且速度快,不用查询数据库。

缺点: 如果加入的分页,那么不好意思,只能导出当前页数的数据。

好了不废话:先看一段JS:

 

tbar : [ {  
                        text : '刷新',  
                        iconCls : 'refresh-icon',  
                        handler : function() {  
                            ds.load();  
                        }  
                    }, {  
                        text : '导出Excel',  
                        iconCls : 'excel-icon',  
                        scope : this,  
                        handler : function(button) {  
                            var deskPanel = Ext.get("x-desktop");  
                            deskPanel.mask('正在为您导出EXCEL,请稍等....',  
                                    'x-mask-loading');  
                            var obj = exportexcel(this.detail);  
                            Ext.Ajax.request({  
                                url : 'qo/export/exportExcel.do',  
                                scope : this,  
                                timeout : 300000,  
                                method : 'post',  
                                params : {  
                                    jsonstr : Ext.util.JSON.encode(obj),  
                                    filename : '应收应付'  
                                },  
                                success : function(response) {  
                                    deskPanel.unmask();  
                                    var fileJson = Ext  
                                            .decode(response.responseText);  
  
                                    var dir = fileJson.dir;  
                                    var filename = fileJson.filename;  
                                    var url = "qo/download/downloadExcel.do?dir="  
                                            + dir + "&filename=" + filename;  
                                    url = encodeURI(url);  
                                    window.open(url, "_self");  
  
                                }  
                            });  
  
                        }  
  
                    }]  

  

声明下 :this.detail = new Ext.grid.GridPanel();

 

然后再看:exportexcel函数 , 负责从gridPanel 中提取相关的信息。

// 导出excel  
function exportexcel(grid){  
    var records = grid.getStore().data.items;  
    if(records.length == 0){  
        Ext.Msg.alert("提示", "不存在要导出数据。");  
        return;  
    }  
    var count =  grid.getColumnModel().getColumnCount();   
    var columns = new Array();  
    for(var i = 0 ; i< count; i ++){  
        if(grid.getColumnModel().isHidden(i))  
            continue;  
        var head = new Object();  
        head.header = grid.getColumnModel().getColumnHeader(i) ;  
        head.dataIndex = grid.getColumnModel().getDataIndex(i) ;  
        if(!head.dataIndex)  
            continue;  
        head.render =   grid.getColumnModel().getRenderer(i);  
        if(head)  
        columns.push(head) ;  
    }  
   
    var dataarray = new Array();  
    for (var i = 0; i < records.length  ; i++) {  
        if(!records[i])  
            continue;  
        var rec = new Object();  
        for(var j = 0 ; j < columns.length ; j ++){  
            rec = columns[j].render.call(columns[j].render , records[i].get(columns[j].dataIndex) , j, records[i] )  
            if (rec) {  
                try {  
                    rec = rec.replace(/<[^>].*?>/g, "")  
                } catch (e) {  
                }  
            }  
            records[i].set(columns[j].dataIndex , rec)  
        }  
        dataarray.push(records[i].data );  
    }  
    var obj = {  
        columns : columns ,  
        datas : dataarray   
    }  
    return obj;  
} 

  下来是 我们aciton中处理这个请求:

 

// 导出Excel  
    @RequestMapping(value = "/exportExcel")  
    public void exportExcel( String jsonstr, String filename ,HttpServletRequest request,HttpServletResponse response){  
        System.out.println(jsonstr);  
        JSONObject object = JSONObject.fromObject(jsonstr);  
        JSONArray colums = JSONArray.fromObject(object.get("columns"));  
        JSONArray datas = JSONArray.fromObject(object.get("datas"));  
          
        List<String> headers = new ArrayList<String>();  
        List<String> dataIndexs = new ArrayList<String>();  
        for (Iterator iterator = colums.iterator(); iterator.hasNext();) {  
            JSONObject obj = (JSONObject) iterator.next();  
            headers.add(obj.getString("header"));  
            dataIndexs.add(obj.getString("dataIndex"));  
        }  
          
        List datalist = new ArrayList();  
        for (Iterator iterator = datas.iterator(); iterator.hasNext();) {  
            JSONObject obj = (JSONObject) iterator.next();  
            //Map map = new THashMap();  
            List array = new ArrayList();  
            for(String dataindex :dataIndexs ){  
                //map.put(dataindex, obj.get(dataindex));  
                array.add(obj.get(dataindex));  
            }  
            datalist.add(array);  
        }  
          
        Map contextMap = new THashMap();  
        contextMap.put("headers",headers);  
        contextMap.put("dataIndexs",dataIndexs);  
        contextMap.put("datalist",datalist);  
          
        String webRoot = super.getServletContext().getRealPath("/");  
        String templetFileName = new StringBuffer(filename).append(".xls").toString();  
          
        String dateTemp = commonXlsPrint(contextMap, webRoot,"commonTemplet.xls",templetFileName);  
        int index = templetFileName.indexOf(".");  
        String tempFileName = new StringBuffer( templetFileName.substring(0, index)).append(dateTemp).append(".xls").toString();  
        String destFileName = new StringBuffer(webRoot).append("/tempDir/").append(tempFileName).toString();  
        Map result = new THashMap();  
        result.put("filename", dateTemp);  
        result.put("dir", "tempDir");  
        super.renderObjectText(result, response);  
    }  

   细心的你估计已经看到了commonTemplet.xls 的模板文件:

转载于:https://www.cnblogs.com/ezsoft/archive/2012/06/19/2554198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值