JXls实现基于excel模板生成报表

jxls是非常小巧方便生成excel报表的工具库。jxls在excel模板中使用特定标记,定义输出格式和数据布局。在很多应用中有报表功能需要生成excel。

java有很多开源或商业库可以创建excel文件(如,APACHE POI, JAVA EXCEL API)。这些库在一定程度上很低级,即使需要创建简单excel文件,也需要写很多java代码。通常需要针对每个单元格设置格式或数据,对于那种复杂的报表布局和格式化数据,代码会非常复杂且难以调试和维护。另外,并不是所有excel特性都被支持及通过API进行操作(例如:宏或图像),对于不支持的特性,建议的解决方案是在Excel模板中手动创建对象,然后用数据填充模板。

Jxls将这种方法提升到了一个更高的层次。在使用Jxls时,只需在Excel模板中定义所有的报表格式和数据布局,并运行Jxls引擎,为其提供要填充模板的数据。在大多数情况下,您只需要编写并调用具有适当配置Jxls引擎程序。

快速指南

下面通过一个简单示例进行说明。

定义pojo

假设有java集合,包括Employee对象,用于输出至Excel中,Employee类定义如下:

public class Employee {private String name;private Date birthDate;private BigDecimal payment;private BigDecimal bonus;// ... constructors// ... getters/setters
}

实现步骤如下:

  1. 增加必要的依赖库
  2. 使用特定的标记创建excel模板文件
  3. 使用jxls库的api处理模板并使用employee数据进行填充

下面详细说明每一步骤。

增加依赖库

最简单的方式是使用maven或gradle。需要使用jxls的两个模块及底层实现:

<dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.4.7</version>
</dependency>

除了依赖jxls模块的core模块,还需要增加依赖用于实现jxls转换引擎的实现,用于执行所有底层java对excel的操作。jxls核心模块不依赖任何特定java-excle库,而是基于与特定excel库无关的一组接口。当前jxls支持两种实现:APACHE POI, JAVA EXCEL API。

基于poi转换,需要使用下面依赖模块:

<dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>1.0.16</version>
</dependency>

使用java excel api转换,需要相应的依赖模块:

<dependency><groupId>org.jxls</groupId><artifactId>jxls-jexcel</artifactId><version>1.0.7</version>
</dependency>

当然,具体poi库或jexcel库也需要引入。

创建excel模板

模板是使用特定标记指定如何输出数据的excel文件。jxls提供了内置的标记处理器用于解析excel模板并提取控制指令。必要时也可以自定义的标记。

jxls默认使用Apache jexl表达式,用于在模板中引用对象的属性和方法。对象必须在jxls 的上下文中用key进行关联,如需要输出employee名称,使用${employee.name}。表达式最基本的语法是使用${},假设上下文中有使用employee作为key的对象。

示例excel模板文件如下:

上面模板供使用4行。在A1单元格包括批注内容为:jx:area(lastCell="D4"),其定义模板的根区域为A1:A4。Each命令用于迭代employees 集合,并填充每个集合元素值(和标记中var属性值保持一致)。each命令的主体区域为A4:D4(有lastCell属性定义),该区域将随着上下文中每个Employee对象进行复制并处理。

该示例使用XlsCommentAreaBuilder类构建模板中Jxls区域。使用该类可以通过模板批注定义区域。如果你喜欢用java代码实现同样功能,你需要删除模板中的批注。

Jxls API处理excel模板

下面看如何使用Jxls API处理excel 模板,代码很简单:

...logger.info("Running Object Collection demo");List<Employee> employees = generateSampleEmployeeData();try(InputStream is = ObjectCollectionDemo.class.getResourceAsStream("object_collection_template.xls")) {try (OutputStream os = new FileOutputStream("target/object_collection_output.xls")) {Context context = new Context();context.putVar("employees", employees);JxlsHelper.getInstance().processTemplate(is, os, context);}}
...

首先从classpath路径下加载object_collection_template.xlsx模板文件,然后定义输出报表文件 target/object_collection_output.xlsx。实际处理仅一行代码:

JxlsHelper.getInstance().processTemplate(is, os, context);

JxlsHelper类默认假设你想使用数据覆盖模板sheet。也你选择在另一个sheet中生成数据:

JxlsHelper.getInstance().processTemplateAtCell(is, os, context, "Result!A1");

在输出区域将从Result sheet中A1单元格开始。
最终报表输出如下图:

总结

本文介绍了Jxls库,可以轻松实现基于excel模板生成报表。更多功能读者可以查看官网文档。

JXls实现基于excel模板生成报表相关推荐

  1. 在VBA编程中巧用EXCEL模板生成样式可变报表

    本文测试文档下载地址:百度文库 随着义教均衡发展工作的稳步推进,要求学校功能室实行规范化管理.若有报废或新增等仪器设备变动,则必须重新制作柜签等报表.Excel是微软公司Microsoft offic ...

  2. Chimm.Excel——使用 Java 基于 excel 模板操作表格的生成

    1. 项目介绍 1.1 简介 Chimm.Excel 是什么? 该程序是一个用 Java 写的 Excel 生成工具,基于模板操作,简单,快捷,易上手. 1.2 特性 数据组装方式大有不同 和网上部分 ...

  3. 基于Excel模板导出——ExcelTemplate

    什么是ExcelTemplate ExcelTemplate项目是一个基于Excel模板,依靠配置文件描述导出过程的Excel导出工具. 它提供了大量适用于各种场景的常用配置(导出规则),同时提供一些 ...

  4. C#基于Npoi通过特性的方式导出简单数据到Excel或基于特性以及基于Excel模板导出数据到Excel以及从Excel中把数据导入到对象中

    导出数据到Excel表格以及从Excel表格中读取数据是我们日常开发很多情况都会遇到的,这里或许只是导出一些简单的数据到excel,这里或许会按照一定的模板导出数据到excel,这里也可能需要从Exc ...

  5. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  6. Java 基于Excel模板实现导出Excel并插入数据

    [本案例基于spring boot架构] 一.需求介绍 给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出. 二.实现方法介绍 1.准备Excel模板 模板中要插入数据的地方用&q ...

  7. Delphi控制Excel自动生成报表

    摘要:Excel是当前最流行的数据报表制作工具.本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题. 关键字:Delphi,Excel,报 ...

  8. springboot整合poi基于excel模板下载的功能实现

    现在网上有很多基于poi的excel导入导出功能实现的代码,大家都写的很好,但好像关于静态资源excel模板导出的却很少.我整理了一下项目中遇到的excel导出的功能代码,展示如下,希望有所帮助,如有 ...

  9. java hutool poi 基于excel模板文件,填充数据的思路

    需求 用户可下载excel模板文件,填充数据后上传,也可以下载已上传所有数据的excel,模板文件和含数据excel,都有列头及列说明:由此想到模板文件和含数据excel共用一份excel模板,下载数 ...

最新文章

  1. Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量
  2. mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储...
  3. python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...
  4. 2纳米芯片问世!芯片性能要起飞?!
  5. 在阿里、腾讯、美团工作有什么区别?
  6. jzoj4015-数列【循环节,数论】
  7. centos6.5下redis安装步骤总结
  8. Transport(传输) 详解
  9. python django查询12306火车票
  10. OGNL表达式的介绍
  11. 电驴emule使用教程
  12. 别在直接背3500个英语单词了,支你一招,看过来
  13. tf.name_scope与tf.variable_scope用法区别
  14. QT项目设计:基于Linux系统的车载系统,地图、音视频播放、天气显示、优美界面 详细教程
  15. 3D变电站园区3D可视化电力监控管理平台
  16. 野百合的春天 ——布鲁斯鲍文
  17. 上海外国语计算机科学与技术,外国语|上海
  18. 跟名站学前端之某百科网站
  19. MySQL查询不以某个字符串为开头
  20. 量化投资常用技能——指标篇3:详解RSI指标,及其代码实现和绘图

热门文章

  1. shell编程(六) : [shell基础] 基本shell脚本
  2. 初始计算机软件教案,鼠标office2007,办公软件教案
  3. Export_Parent父子项目的搭建
  4. bios添加slic激活win7
  5. python wxpython wx.grid动态增加行_wxPython控件学习之wx.FlexGridSizer
  6. 网络通信误码率测试软件,DMR终端直通模式误码率测试软件的设计与实现
  7. 网络相册输出html,免费制作HTML网络相册
  8. 非常全的23种设计模式详解
  9. 机器视觉与图像处理知识点总结
  10. 中艺光影秀解析建筑投影秀、3DMapping秀、全息投影技术的区别以及应用场景