博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基于jxl与模板导出excel并弹出下载
阅读量:4261 次
发布时间:2019-05-26

本文共 3800 字,大约阅读时间需要 12 分钟。

[java]
  1. public static void test(){  
  2.         ReportEnginer enginer = new ReportEnginer();  
  3.         String templateFile = "E:/template.xls";  
  4.         Map<String, Object> context = new HashMap<String, Object>();  
  5.         context.put("title""测试模板标题");  
  6.         context.put("name","测试字段");  
  7.         context.put("more","等等。。");  
  8.           
  9.         //除了单个字段  还可以存入一个list  
  10.         List<Map> testList = new ArrayList<Map>();  
  11.         for(int i=0;i<5;i++){  
  12.             Map innerMap = new HashMap();  
  13.             innerMap.put("name""姓名"+i);  
  14.             innerMap.put("sex""男");  
  15.             innerMap.put("age", i);  
  16.             innerMap.put("birthday","2016-05-20");  
  17.             testList.add(innerMap);  
  18.         }  
  19.         context.put("testList", testList);  
  20.           
  21.         //看需求存入多个list  
  22.         //context.put("list1", list1);  
  23.         //context.put("list2", list2);  
  24.         //。。。  
  25.           
  26.         String destFile = "E:/target.xls";;  
  27.         try {  
  28.             enginer.excute(templateFile, context, destFile);  
  29.         } catch (Exception e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.           
  33.     }  
其中的测试模板文件 template.xls 大致如下

然后同理,连接数据库操作类似,就是数据的获取与处理略为不同 

[java]
  1. /** 
  2.  * 根据模型名称动态导出对应数据库表数据excel 
  3.  * @param modelName 模型名称/表名 
  4.  * @param cols 列名 
  5.  * @param sql 查询条件 
  6.  */  
  7. public static String export(String modelName,String cols,String sql){  
  8.     ReportEnginer enginer = new ReportEnginer();  
  9.     String templateFile = PathKit.getWebRootPath()+"/project/cars3/excelTemplate/"+modelName+".xls";  
  10.     String[] colList=cols.split(",");  
  11.     Map<String, Object> context = new HashMap<String, Object>();  
  12.       
  13.     List<Record> list = Db.find(sql);  
  14.     List<Map> testList = new ArrayList<Map>();  
  15.     for(Record rec:list){  
  16.         Map innerMap = new HashMap();  
  17.         for(int j=0;j<colList.length;j++){  
  18.             //特殊处理某些需要额外转换的字段  
  19.             if("Status".equals(colList[j])){  
  20.                 rec.set("Status","Y".equals(rec.get("Status"))?"启用":"停用");  
  21.             }  
  22.             if("storeName".equals(colList[j])){  
  23.                 String storeName=Db.queryStr("select storeName from zdmember where storeId=?",rec.get("storeId"));  
  24.                 rec.set("storeName", storeName);  
  25.             }  
  26.             if("Content".equals(colList[j])){  
  27.                 String content=rec.get(colList[j]).toString().trim();  
  28.                 if(content.contains("\r")){         
  29. //ReportEnginer类中对以"</r_"  ">"作为单元格开始结束标记 执行substring, 存在回车换行符会报异常  ArrayIndexOutOfBoundsException  
  30.                     //System.out.println("replace前:"+content);  
  31.                     content=content.replaceAll("[\\t\\n\\r]""");  
  32.                     //System.out.println("replace后:"+content);  
  33.                 }  
  34.                 rec.set(colList[j],content);  
  35.             }  
  36.                 innerMap.put(colList[j],rec.get(colList[j]));  
  37.         }  
  38.         testList.add(innerMap);  
  39.     }  
  40.     context.put("models", testList);  
  41.     String fileName=DateKit.getCurrentDateTime("yyyyMMddhhmmss")+".xls";  
  42.     String destFile = PathKit.getWebRootPath()+"/upload/excel/"+modelName+"/"+fileName;  
  43.     try {  
  44.         enginer.excute(templateFile, context, destFile);  
  45.     } catch (Exception e) {  
  46.         e.printStackTrace();  
  47.         return "error";  
  48.     }  
  49.     return fileName;  
  50. }  
然后是service层处理
[java]
  1. public void exportExcel(){  
  2.     String modelName="a7usedgarage";  
  3.     String cols="Title,storeName,Price,Contact,Tel,Saled,AddTime";  
  4.     String sql="select * from a7usedgarage order by AddTime desc";  
  5.     //long start=System.currentTimeMillis();  
  6.     String fileName=ExcelKit.export(modelName, cols,sql);     //将返回的文件名再返回到前端   用于下载  
  7.     //long end=System.currentTimeMillis();  
  8.     //System.out.println("花费时间:"+(end-start));  
  9.     //renderFile(new File(PathKit.getWebRootPath()+"/upload/excel/a7usedgarage/"+fileName));  
  10.     renderEasyUISuccess(fileName);  
  11. }  
前端JS处理  弹出下载 并提示导出进度
[html]
  1. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-control-double-270" plain="true" onclick="clickDownload(this,'${CONTEXT_PATH}/project/admin/vehicleManagement/exportExcel')">导出</a>  
[javascript]
  1. function clickDownload(a,url){   
  2.      $.ajax({  
  3.              url:url,  
  4.              type:"post",  
  5.              beforeSend: function(){  
  6.                  $.messager.progress({  
  7.                         title: 'Please waiting',  
  8.                         msg: '导出中...',  
  9.                         interval:0 ,  
  10.                 });  
  11.                  progress();  
  12.              },  
  13.              complete: function(){  
  14.                      $.messager.progress('close');  
  15.              },  
  16.              success: function (resp) {  
  17.                  var iframe = document.createElement("iframe");  
  18.                  iframe.src = "${CONTEXT_PATH}/upload/excel/a7usedgarage/"+resp.message;  
  19.                  iframe.style.display = "none";  
  20.                  document.body.appendChild(iframe);  
  21.              },  
  22.      });  
  23. }   
ps:用到的几个包

jxl-2.6.10.jar

freemarker-2.3.18.jar

freemarker-util-0.0.1-SNAPSHOT.jar 

jxl-report-1.0.jar 

你可能感兴趣的文章
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
转载:在 Windows 10 下遇到移动硬盘不自动分配盘符的问题
查看>>
DDR2 SSTL_18标准
查看>>
DDR3的DQS_p/n信号电平摆幅变化不一致现象
查看>>
北大旁听生中的历史名人
查看>>
大唐凌烟阁开国廿四将
查看>>
Access数据库出现"Selected collating sequence not supported by the operating system."错误
查看>>
逻辑思维测试题
查看>>
如何用Easy CHM制作CHM格式电子书(帮助文档)
查看>>
为什么学习python
查看>>
华为进不了美国,并不是贸易保护这么简单
查看>>
markdown文件的基本常用编写语法(图文并茂)
查看>>
java变量简介
查看>>
Shell十分钟入门
查看>>
nginx 配置 upstream backup 报错
查看>>
Linux执行 wget命令:提示command not found的两种解决方法
查看>>
openssl实现md5加rsa签名
查看>>
史上最全的前端学习路线图,干货满满
查看>>
来点不一样的:解耦 HTML、CSS 和 JS之间的那些事
查看>>