项目中前台用的是Ext JS,要从数据库中查询数据并导出为Excel表格
对此研究了下,代码如下:
前台代码:
1 /** 2 * 进行下载文件(form方式) 3 */ 4 _downloadDraft:function () { 5 var formId = ‘form-‘+Ext.data.IdGenerator.get(‘uuid‘).generate();//下载表单的id 6 if (!Ext.fly(formId)) { //如果不存在一个id为formId的form表单,则执行下面的操作 7 8 //下面代码是在创建一个表单以及添加相应的一些属性 9 var downForm = document.createElement(‘form‘); //创建一个form表单 10 downForm.id = formId; //该表单的id为formId 11 downForm.name = formId; //该表单的name属性为formId 12 downForm.className = ‘x-hidden‘; //该表单为隐藏的 13 downForm.action = ‘pledgeRepoDlgQuoteController/downloadDraft.action‘; //表单的提交地址 14 downForm.method = ‘post‘; //表单的提交方法 15 16 document.body.appendChild(downForm); //将form表单追加到body里面 17 } 18 Ext.fly(formId).dom.submit(); //调用form表单的submit方法,提交表单,从而开始下载文件 19 20 //因为表单已经提交了,文件也开始下载了,所以过河拆桥,把表单移除掉 21 //如果存在id为formId的表单,则将它移除掉 22 if (Ext.fly(formId)) { 23 document.body.removeChild(downForm); 24 } 25 }
或者:
1 /** 2 * 进行下载文件(iframe方式) 3 */ 4 _downloadDraft:function () { 5 var elemIF = document.createElement("iframe"); 6 elemIF.src = ‘pledgeRepoDlgQuoteController/downloadDraft.action‘; 7 elemIF.style.display = "none"; 8 document.body.appendChild(elemIF); 9 }
后台代码:
1 @RequestMapping("/downloadDraft.action") 2 public String downloadDraft( HttpServletRequest request, HttpServletResponse response) { 3 logger.info("开始下载质押式回购对话报价草稿~~~"); 4 HSSFWorkbook hssfWorkbook = this.pledgeRepoDlgDraftService.exportDraft(); 5 String fileName = "质押式回购对话报价草稿.xls"; 6 try { 7 fileName = new String(fileName.getBytes("GBK"), "ISO8859-1"); 8 response.setHeader("Content-disposition", "attachement;filename="+fileName); 9 response.setContentType("application/vnd.ms-excel"); 10 OutputStream out = response.getOutputStream(); 11 hssfWorkbook.write(out); 12 out.close(); 13 logger.info("结束下载质押式回购对话报价草稿~~~"); 14 }catch (Exception e){ 15 logger.info("下载质押式回购对话报价草稿中出现异常~~~"); 16 e.printStackTrace(); 17 } 18 return null; 19 }
原文:https://www.cnblogs.com/thaipine/p/10826970.html