java+jxls利用excel模版进行导出
大多时候会出现需要导出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名称取出进行遍历,在源码中
![](/assets/blank.gif)
![](/assets/blank.gif)
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的元素是以下类)
![](/assets/blank.gif)
![](/assets/blank.gif)
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模版进行导出相关推荐
- jxls模板hashmap_java+jxls利用excel模版进行导出
大多时候会出现需要导出excel的功能,利用poi可以实现简单的导出,可以说poi的功能非常强大可以做到细节的定制化操作,但相对于在office操作excel,利用poi完全生成excel会显得非常复 ...
- luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充
luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充 业务需求 关键字 luckySheet POI EasyExcel 代码实现 前端luckySheet配置的ex ...
- JAVA实现创建Excel表并导出(转发)
JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...
- [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现
第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...
- Java 利用hutool工具实现导出excel并合并单元格
Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...
- java分页导出excel_报表中利用API来实现导出excel列后分页
在报表中,当统计报表统计的指标非常多,在页面上展现的时候,整个报表会变得非常的长,经常会通过设置滚动条拖拽来查看整个报表,当这时用不分页导出excel后,查看excel中报表被导出到一个sheet中, ...
- 工作系列Java开发之利用Java实现ERP系统中Excel表格的导出
工欲善其事必先利其器 前言: 最好的学习方式就是分享,喜欢就三连一下吧(关注,转发,点赞). 今天的内容开始之前,我先申明一下,今天的知识很重要! 很重要! 很重要 ,Excel表格的导出在正式步入公 ...
- java 列表数据List通过模板导出excel表和word表
1.maven需要的jar包 <!-- exl导出 --> <dependency><groupId>net.sf.jxls</groupId>< ...
- java ajax 导出excel文件_springMVC(4)---生成excel文件并导出
springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...
最新文章
- 蚂蚁开源增强版 SpringBoot,都有哪些骚能力?
- 分享一下python入门知识点-输入与输出教程,不喜勿喷
- img 服务器上的图片不显示图片,img显示服务器图片不显示
- 一文了解OOM及解决方案,成功入职字节跳动
- 组件间数据交互||父组件向子组件传值-基本使用|| 父组件向子组件传值-props属性名规则
- Informatic 使用过程中的问题
- docker可视化管理界面_分析一款Docker容器可视化管理工具Porttainer
- docker安装jenkins并用docker部署net
- 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
- Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释
- Android 声音采集回声与回声消除
- Linux 常用的软件包管理器/软件包管理工具详解
- 绿色版飞信2008 启动时报错“无法注册类别...”的解决办法
- php手机注册和微信登录统一,微信登录和公众号授权登录开发逻辑详解
- ZOJ 3880 Demacia of the Ancients
- 禁用 SQL 游标,告诉你外面听不到的原因【内含福利】
- HP iLO There are pending changes that may not take effect until ILO is reset
- 降成本利器——SRM之电子招投标
- 肝完《浏览器基本原理与实践》的精华分享
- 紧随小米2:LG Optimus G也用高通四核APQ8064
热门文章
- 从txt中读入数据到数组中(fscanf)
- 分数等级_山东新高考:quot;6选3quot;等级考分数是怎么换算出来的
- synchronized 关键字的底层原理
- 先有鸡还是先有蛋? 加拿大科学家揭开谜底
- html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...
- 用到的python组件
- GDAL的python版本安装使用
- 使用GDAL的MEM内存文件保存临时文件
- SQL那些事儿(一)
- 不使用ArcObjects直接查找SDE数据库信息