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

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

在java中:

InputStream is =getFileInputStream(templateFileName);//获取模板输入流

XLSTransformer transformer = newXLSTransformer();

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) throwsParsePropertyException {

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= newHashMap();

}

POIFSFileSystem fs= newPOIFSFileSystem(is);

hssfWorkbook= newHSSFWorkbook(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生产excel

returnhssfWorkbook;

}

View Code

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

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

public class ExcelPrintDomain implementsSerializable {private List lista = newArrayList();privateObject domaina;privateServletContext context;private intpageNo;publicExcelPrintDomain() {

}publicExcelPrintDomain(ServletContext context) {this.context =context;

}public voidaddDomain(Object obj) {this.domains.add(obj);

}public voidaddLista(Object obj) {this.lista.add(obj);

}public intgetPageNo() {return this.pageNo;

}public void setPageNo(intpageNo) {this.pageNo =pageNo;

}publicList getLista() {return this.lista;

}public voidsetLista(List lista) {this.lista =lista;

}publicObject getDomaina() {return this.domaina;

}public voidsetDomaina(Object domaina) {this.domaina =domaina;

}

}

View Code

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

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

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

  1. 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. python excel模板_如何利用Excel与Python制作PPT

    对外汉语课堂中需要制作PPT.有些PPT的版式是相对固定的,如果数量巨大的话,可以利用python的pptx插件,与excel相结合,制作PPT.完整工作流有些复杂,所以分为4个部分来说明. PPT准 ...

  4. 可视化,市场分析表Excel模板,财务统计EXCEL模版,人员变动EXCEL模版,销量完成度Excel模板

    可视化,市场分析表Excel模板,财务统计EXCEL模版,人员变动EXCEL模版,销量完成度Excel模板 可视化科技风EXCEL模版 可视化EXCEL模版,科技风十足,本小白做EXCEL没有模版真的 ...

  5. java导出数据到excel模板_springboot+jxls 根据Excel模板 填写数据并导出

    项目结构 pom.xml net.sf.jxls jxls-core 1.0.6compile 学生信息表模板: ExcelUtiles package cn.bdqn.utils;import ne ...

  6. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)

    本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...

  7. 利用Excel 2010的“图表模板”功能,快速创建新图表

    为了让自己制作的数据透视图更具吸引力,小刘费尽心思将图表打扮的十分漂亮.但是,在以后的工作中,如果他需要再创建类似的图表时,是否还要重新对图表进行修饰美化呢?答案是否定的.其实,在Excel 2010 ...

  8. 性能碾压 POI !利用模板语法快速生成 Excel 报表

    本期讲师:刘鹏 GcExcel项目组,核心开发者 Hello,大家好,本期葡萄城技术公开课,将由我来为大家带来<性能碾压 POI !利用模板语法快速生成 Excel 报表>的技术分享. 本 ...

  9. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

最新文章

  1. ​吐血整理:手拿几个大厂offer的秘密武器!
  2. Request header field token is not allowed by Access-Control-Allow-Headers in
  3. Linux 命令行敲命令 光标移动快捷键
  4. 深圳网络推广谈论网站收录后的内容还能不能修改?
  5. 安卓socks5代理客户端_内网Mysql代理浅析
  6. pip配置永久国内源
  7. 数据挖掘与数据化运营实战. 3.12 数据产品
  8. 身体曲线如何反映出健康
  9. 强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测
  10. mesh和wifi中继的区别_深度解读Mesh路由和无线中继的差异,谁才是性价比之选?...
  11. MySQL 的CASE WHEN 语句
  12. LeetCode 3sum 问题
  13. [转] android学习和广告平台赚钱
  14. PS快速切换证件照背景颜色
  15. Oracle 12c中的MGMTDB
  16. 自己对ajax的第一次上手被人说菜死还真是菜
  17. Android长截图与长图分享
  18. win7计算机怎么放在桌面上,win7系统把我的电脑放到桌面的解决办法
  19. ddtv.space index.php,图解MongoDB原理(二)
  20. 老调重弹:JDBC系列 之 存储过程 CallableStatement(创建和使用)

热门文章

  1. debug版函数初始化入口 0xcc
  2. 神经网络一般训练多少次,神经网络训练时间太长
  3. cdn服务器性能要求,什么是CDN,CDN有哪些优点?(中科三方)
  4. Tizen SDK安装和使用(一)-Tizen SDK下载
  5. 2021年中国1,4-丁二醇(BDO)市场供需分析,“限塑令”背景需求与价格持续提升「图」
  6. 用R语言的quantreg包进行分位数回归
  7. js实现打印 print.js
  8. python链表实现多项式_Python链表之两数之和
  9. C语言判断素数,判断质素算法
  10. 利用Go语言批量刷公益 瑞友天翼(1day)