大多时候会出现需要导出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. 电子工程师必须掌握的20个模拟电路
  2. 如何让Table显示滚动条
  3. 机器学习笔记7-监督学习
  4. app显示服务器图片不显示,如何读取并显示服务器上不在webapp目录上的图片?
  5. JavaScript两个变量交换值(不使用临时变量)
  6. asp论坛回复功能怎么实现_在asp.netcore中使用中间件(middleware)实现api拦截及验证功能
  7. 7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用
  8. lua如何判断是否支持cookie_我们应该如何判断机油是否变质?
  9. php 显示代码行数据,几行php代码把数据格式化成树形结构
  10. [渝粤教育] 南开大学 思辨式英文写作 参考 资料
  11. linux cat 文本颜色,linux文本文件查看、展示命令 :cat head tail grep more less nl
  12. 中小学信息学相关比赛汇总(C++类)
  13. 2021儋州市民族中学高考成绩查询,海南2021高考成绩排名查询,海南高考个人成绩排名如何查询...
  14. SpringCloud OpenFeign服务调用客户端介绍及配置使用
  15. android unity hid,Unity5.X与Arduino交互
  16. 在【守望先锋】学习C++的类与对象
  17. 关于数据库的练习题,关系代数
  18. Python科学绘图 网格色块背景分类图 基于pcolormesh函数
  19. 设置网页视频播放倍速
  20. 用Java写一个水仙花数算法

热门文章

  1. 100个最佳Linux站点
  2. 前端 JavaScript 条件语句优化
  3. golang actor模型探索
  4. Cocos2d-x动作CCAction
  5. 实用typescript_TypeScript 泛型使用2-常见的工具类型
  6. 收音机磁棒天线4根接法_重磅彩蛋:DE1103收音机不用打磨就能用拉杆/外接天线收中波...
  7. 小程序 css框架,微信小程序_如何支持Less等CSS框架开发
  8. matlab状态方程 传递函数 可控性,matlab 控制系统仿真
  9. 与同步传递相关的获取-释放序列
  10. school_vue操作记录