大多时候会出现需要导出excel的功能,利用poi可以实现简单的导出,可以说poi的功能非常强大可以做到细节的定制化操作,但相对于在office操作excel,利用poi完全生成excel会显得非常复杂,细节代码会特别多。在这个时候我们可以事先利用offfice制定好一个模版文件,在利用jxls来通过模版文件来实现复杂excel的导出。

  模版的制作和一般excel的编写是一样的,在需要填充的网格利用{}来进行取出java中传进来的变量值,如图:

在java中:

InputStream is =getFileInputStream(templateFileName);//获取模板输入流
XLSTransformer transformer = new XLSTransformer();
HSSFWorkbook resultWorkbook =transformer.transformMultipleSheetsList(is,prints/*要打印的list*/, sheetNames/*sheet的名称list*/, "print"/*excel的bean名称*/, new HashMap(), 0);

  在excel中,jxls会将要打印的list通过我们定义的bean名称取出进行遍历,在源码中

public HSSFWorkbook transformMultipleSheetsList(InputStream is, List objects, List newSheetNames, String beanName, Map beanParams, int startSheetNum) throws ParsePropertyException {HSSFWorkbook hssfWorkbook = null;try {if (beanParams != null && ((Map)beanParams).containsKey(beanName)) {throw new IllegalArgumentException("Selected bean name '" + beanName + "' already exists in the bean map");}if (beanName == null) {throw new IllegalArgumentException("Bean name must not be null");}if (beanParams == null) {beanParams = new HashMap();}POIFSFileSystem fs = new POIFSFileSystem(is);hssfWorkbook = new HSSFWorkbook(fs);for(int sheetNo = 0; sheetNo < hssfWorkbook.getNumberOfSheets(); ++sheetNo) {String spreadsheetName = hssfWorkbook.getSheetName(sheetNo);if (!this.isSpreadsheetToRemove(spreadsheetName)) {if (this.isSpreadsheetToRename(spreadsheetName)) {hssfWorkbook.setSheetName(sheetNo, this.getSpreadsheetToReName(spreadsheetName));}HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(sheetNo);if (startSheetNum == sheetNo && objects != null && !objects.isEmpty()) {for(int i = 0; i < objects.size(); ++i) {Object bean = objects.get(i);String beanKey = beanName;if (i != 0) {beanKey = beanName + i;HSSFSheet newSheet = hssfWorkbook.createSheet((String)newSheetNames.get(i));Util.copySheets(newSheet, hssfSheet, beanName, beanKey);Util.copyPageSetup(newSheet, hssfSheet);Util.copyPrintSetup(newSheet, hssfSheet);} else {hssfWorkbook.setSheetName(sheetNo, (String)newSheetNames.get(i));}((Map)beanParams).put(beanKey, bean);//在此次将我们传入的list通过map的形式放入beanParams
                        }}} else {hssfWorkbook.removeSheetAt(sheetNo);--sheetNo;}}} catch (IOException var16) {var16.printStackTrace();}if (hssfWorkbook != null) {for(int i = 0; i < hssfWorkbook.getNumberOfSheets(); ++i) {Util.setPrintArea(hssfWorkbook, i);}}this.transformWorkbook(hssfWorkbook, (Map)beanParams);//通过模板和beanParams生产excelreturn hssfWorkbook;}

View Code

在excel中通过beanParams的Map形式来进行取值,有点类似于freemarker语法,但不同于freemarker

在此事例中,我定义了一个类(domain)来存放list,类的形式如下(即要打印的list的元素是以下类)

public class ExcelPrintDomain implements Serializable {private List lista = new ArrayList();private Object domaina;private ServletContext context;private int pageNo;public ExcelPrintDomain() {}public ExcelPrintDomain(ServletContext context) {this.context = context;}public void addDomain(Object obj) {this.domains.add(obj);}public void addLista(Object obj) {this.lista.add(obj);}public int getPageNo() {return this.pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}public List getLista() {return this.lista;}public void setLista(List lista) {this.lista = lista;}public Object getDomaina() {return this.domaina;}public void setDomaina(Object domaina) {this.domaina = domaina;}
}

View Code

  所以在模板中${print.domaina.orgName}代表的是取出domain里面的domaina里面的key为orgName的value值,

  ${print.lista.ec01002}代表的是在遍历中取出domain中的lista包含的Map里面的key为ec01002的value值。

转载于:https://www.cnblogs.com/many-object/p/8404427.html

java+jxls利用excel模版进行导出相关推荐

  1. jxls模板hashmap_java+jxls利用excel模版进行导出

    大多时候会出现需要导出excel的功能,利用poi可以实现简单的导出,可以说poi的功能非常强大可以做到细节的定制化操作,但相对于在office操作excel,利用poi完全生成excel会显得非常复 ...

  2. luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充

    luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充 业务需求 关键字 luckySheet POI EasyExcel 代码实现 前端luckySheet配置的ex ...

  3. JAVA实现创建Excel表并导出(转发)

    JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...

  4. [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现

    第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...

  5. Java 利用hutool工具实现导出excel并合并单元格

    Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...

  6. java分页导出excel_报表中利用API来实现导出excel列后分页

    在报表中,当统计报表统计的指标非常多,在页面上展现的时候,整个报表会变得非常的长,经常会通过设置滚动条拖拽来查看整个报表,当这时用不分页导出excel后,查看excel中报表被导出到一个sheet中, ...

  7. 工作系列Java开发之利用Java实现ERP系统中Excel表格的导出

    工欲善其事必先利其器 前言: 最好的学习方式就是分享,喜欢就三连一下吧(关注,转发,点赞). 今天的内容开始之前,我先申明一下,今天的知识很重要! 很重要! 很重要 ,Excel表格的导出在正式步入公 ...

  8. java 列表数据List通过模板导出excel表和word表

    1.maven需要的jar包 <!-- exl导出 --> <dependency><groupId>net.sf.jxls</groupId>< ...

  9. java ajax 导出excel文件_springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

最新文章

  1. 蚂蚁开源增强版 SpringBoot,都有哪些骚能力?
  2. 分享一下python入门知识点-输入与输出教程,不喜勿喷
  3. img 服务器上的图片不显示图片,img显示服务器图片不显示
  4. 一文了解OOM及解决方案,成功入职字节跳动
  5. 组件间数据交互||父组件向子组件传值-基本使用|| 父组件向子组件传值-props属性名规则
  6. Informatic 使用过程中的问题
  7. docker可视化管理界面_分析一款Docker容器可视化管理工具Porttainer
  8. docker安装jenkins并用docker部署net
  9. 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
  10. Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释
  11. Android 声音采集回声与回声消除
  12. Linux 常用的软件包管理器/软件包管理工具详解
  13. 绿色版飞信2008 启动时报错“无法注册类别...”的解决办法
  14. php手机注册和微信登录统一,微信登录和公众号授权登录开发逻辑详解
  15. ZOJ 3880 Demacia of the Ancients
  16. 禁用 SQL 游标,告诉你外面听不到的原因【内含福利】
  17. HP iLO There are pending changes that may not take effect until ILO is reset
  18. 降成本利器——SRM之电子招投标
  19. 肝完《浏览器基本原理与实践》的精华分享
  20. 紧随小米2:LG Optimus G也用高通四核APQ8064

热门文章

  1. 从txt中读入数据到数组中(fscanf)
  2. 分数等级_山东新高考:quot;6选3quot;等级考分数是怎么换算出来的
  3. synchronized 关键字的底层原理
  4. 先有鸡还是先有蛋? 加拿大科学家揭开谜底
  5. html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...
  6. 用到的python组件
  7. GDAL的python版本安装使用
  8. 使用GDAL的MEM内存文件保存临时文件
  9. SQL那些事儿(一)
  10. 不使用ArcObjects直接查找SDE数据库信息