jqgrid导出excel文档

喜欢的朋友可以关注下,粉丝也缺。

        

最近一个项目中需要把jqgrid的数据导出成excel文档,所以去查询一下jq的文档,它所提供的接口是需要收费的,当时我就一脸嫌弃的表情。

        无奈之举只能自己想办法了,前思后想,突然灵光一闪,可以把数据提交到后台通过后台写出到文档。

        首先我封装了一个js把jq的数据提交的后台,下面我们来看看这个封装的js:

        

function getXlsFromTbl(table_id, container_id ,form_id, title, rownumbers) {  
		    try {  
		        var content = "";  
		        if (table_id != null && table_id != "" && table_id != "null") {  
		        content = getTblData($('#' + table_id), $('#' + container_id), rownumbers);  
		        }  
		        if (content == "") {  
		            alert("表格不存在");  
		            return;  
		        }  
		        var fileName = getExcelFileName(title);  
		          
		        doFileExport($('#' + form_id), fileName, content);  
		    }  
		    catch (e) {  
		        alert("导出异常:" + e.name + "->" + e.description + "!");  
		    }  

	}

        function getTblData(tableobj, containerobj, rownumbers) {  
		    var outStr = "";  
		    if (tableobj != null) {  
		        var rowdata = tableobj.getRowData();  
		        var Lenr = 1;  
		        for (i = 0; i < Lenr; i++) {  
		            //var Lenc = curTbl.rows(i).cells.length;  
		            var th;  
		            if (rownumbers == false) {  
		                th = containerobj.find('TH:not(:first-child)');  
		            }  
		            else {  
		                th = containerobj.find('TH');  
		            }  
		            th.each(function(index, element) {  
		                var j = index + 1;  
		                var content = $(element).text();  
		                content = content.replace(/(^\s*)|(\s*$)/g, "");//去掉空格  
		                outStr += content + ",";  
		            });  
		            outStr += "+nl+";  
		        }  
		        var tmp = "";  
		        for (i = 0; i < rowdata.length; i++) {  
		            var row = eval(rowdata[i]);  
		            for (each in row) {  
		            var temp = $(row[each]).text();  
		            if($(row[each]).text() == null || $(row[each]).text() == ""){  
		            	    if(row[each].charAt(0) != '<')  
		            	    	 outStr += row[each] + ",";  
		            }  
		             else  
		            	     outStr += $(row[each]).text() + ",";  
		            }  
		            outStr += "+nl+";  
		        }  
		    }  
		    else {  
		        outStr = null;  
		        alert(inTbl + " null!");  
		    }  
		    return outStr;  

		}

            function getExcelFileName(title) {  
		    var d = new Date();  
		    var curYear = d.getYear();  
		    var curMonth = "" + (d.getMonth() + 1);  
		    var curDate = "" + d.getDate();  
		    var curHour = "" + d.getHours();  
		    var curMinute = "" + d.getMinutes();  
		    var curSecond = "" + d.getSeconds();  
		    if (curMonth.length == 1) {  
		        curMonth = "0" + curMonth;  
		    }  
		    if (curDate.length == 1) {  
		        curDate = "0" + curDate;  
		    }  
		    if (curHour.length == 1) {  
		        curHour = "0" + curHour;  
		    }  
		    if (curMinute.length == 1) {  
		        curMinute = "0" + curMinute;  
		    }  
		    if (curSecond.length == 1) {  
		        curSecond = "0" + curSecond;  
		    }  
		    var fileName = title + "_" + curYear + curMonth + curDate + "_"  
		            + curHour + curMinute + curSecond + ".csv";  
		  
		  
		    return fileName;  

		}

            function doFileExport(formobj, filename, content) {  
		   formobj.html("");  
		       $("#filename").val(filename);  
		       $("#content").val(content);  
		       formobj.submit();  
		       $("#gridTable").trigger("reloadGrid");
		       

            }


上面就是封装的js文件,只需要在页面里调用一下方法就行,需要注意的是页面上需要一个form表达一个div容器包含table示例如下:

  


  接下来只需要在后台里面写一段java代码就好了,就可以把jq的数据导出到excel里面。

    

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("gbk");


        String content = request.getParameter("content");
        String filename = request.getParameter("filename");


        content = content.replace("+nl+", "\n");
        response.setContentType("application/octet-stream;charset=gbk");
        response.setHeader("content-disposition", "attachment;filename=" + filename);
        BufferedOutputStream write = new BufferedOutputStream(response.getOutputStream());
        write.write(content.getBytes("gbk"));
        write.flush();
        write.close();

    }

    就是这么的简单,这里已经完了,一个完整的流程,对于jq的这个接口是要收费的真的必须鄙视一下,已经打算放弃这个插件,有好用的插件欢迎各位推荐下,欢迎各位喜欢水的加Q群308742428

喜欢的朋友可以关注下,粉丝也缺。


你可能感兴趣的:(jqgrid,攻城狮的日常)