jqgrid导出excel文档

简介: 喜欢的朋友可以关注下,粉丝也缺。        最近一个项目中需要把jqgrid的数据导出成excel文档,所以去查询一下jq的文档,它所提供的接口是需要收费的,当时我就一脸嫌弃的表情。

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

        

最近一个项目中需要把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("<input id='filename' name='filename' type='text' style='display: none'><input                             id='content' name='content' type='text' style='display: none'>");  
		       $("#filename").val(filename);  
		       $("#content").val(content);  
		       formobj.submit();  
		       $("#gridTable").trigger("reloadGrid");
		       

            }


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

  

<form id="download_form" method="post"  target="_blank" action="/liushouet/DownLoadTableDataAction">  
	 <div id="table_container">  
	           <table id="gridTable"></table>
                   <div id="gridPager"></div>

	 </div>

  </form>

  接下来只需要在后台里面写一段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

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


相关文章
|
3天前
|
Java
java导出复杂excel
java导出复杂excel
|
2天前
|
JavaScript
vue导出excel无法打开问题
vue导出excel无法打开问题
|
3天前
|
easyexcel BI
excel合并列导出文件
excel合并列导出文件
|
3天前
|
前端开发
基于jeecgboot的flowable流程任务excel导出功能
基于jeecgboot的flowable流程任务excel导出功能
10 1
|
11天前
|
JSON JavaScript 前端开发
使用JavaScript和XLSX.js将数据导出为Excel文件
使用JavaScript和XLSX.js将数据导出为Excel文件
21 0
|
24天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
118 0
|
24天前
|
数据库
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法
|
1月前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
|
1月前
|
SQL 数据库连接 数据库
【SQL Server】2. 将数据导入导出到Excel表格当中
【SQL Server】2. 将数据导入导出到Excel表格当中
47 0
|
2月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!