admin 管理员组

文章数量: 1184232


2024年3月28日发(作者:autopsy翻译)

一.JXLS简介

在很多涉及到某种报表功能的Java程序中都需要生成Excel表格。目前通过Java

来操作.xls文件最完整的类库是Apache POI类库,但是当需要创建多种自定义的复杂

Excel报表的时候就会出现问题,这些Excel报表一般都带有多种格式和可扩展功能,在

这种情况下,你就不得不写一大堆Java代码来创建报表的规则集(workbook),规则集

一般包含所有要求的格式,公式,其他特定的设置和正确的Java对象集的数据出口。这些

代码一般都是难以调试,任务也常常变得容易出错并且耗时。

另外一个问题是有很多Excel组件都没有提供的API。幸运的是POI API读取Excel

文件,可以保持它原有的格式,然后根据需要进行修改。很明显,用一些Excel编辑工

具来创建所有格式正确的报告模板然后指定真实的数据应该放置的地方,会容易很多。

JXLS是实现这种方法并且只用几行代码就能创建极其复杂的Excel报表。你只需要用特

定的标记来创建一个带有所有要求的格式,公式,宏等规则的.xls模板文件来指定数据放

置的位置然后再写几行代码来调用JXLS引擎来传递.xls模板和导出的数据作为参数。

除了生成Excel报表功能,JXLS还提供了jxls-reader模块,jxls-reader模块会很有用,

如果你需要解析一个预定义格式的Excel文件并在其中插入数据的话。jxls-reader允许

你用一个简单的XML文件描述解析规则,读取Excel文件和你的各种JAVA对象

(population of your Java objects)的所有其他工作都会自动完成。

二.JXLS安装

为了使用JXLS引擎,你必须把添加到项目的classpath,如果计划使用

JXLS来读取.xls文件,那么你必须还要把加入到项目的classpath中。

如果你用Maven来构建你的应用程序,你可以在你的文件中配置指定要

求的JXLS模块的依赖,让它们可以从Maven仓库下载。

下面的Apache类库也要求添加到项目的classpath中

POI 3.6 or higher

Commons BeanUtils

Commons Collections

Commons JEXL

Commons Logging

Commons Digester

注意:当前JXLS版本可能无法正常地与较早的POI库版本工作,因此,如果你必须要

使用较早版本的POI(prior 3.2)使用较老版本的JXLS就行了

三.JXLS参考

1.简介

这部分描述在.xls模板文件的中的对象属性访问语法,如果想让JXLS引擎进行正确的处

理.xls模板文件就必须使用规定的语法。

接下来的部分假设我们有两个相互依赖的JAVA beans,类型分别为Department和

Employee,在代码中像这样被传递到XLSTransformer中:

Department department;

... //initialization

Map beans = new HashMap();

("department", department);

XLSTransformer transformer = new

XLSTransformer();ormXLS(xlsTemplateFileName, beans,

outputFileName);

2. 属性访问

2.1.基本属性访问

使用下面的语句来访问Excel单元格中简单的bean属性:

${}

在上面这个语句中,JXLS引擎会通过关键字department在当前bean映射下搜索这个bean,

然后会尝试获取这个bean的name属性的值并把它放到相应的Excel单元格中。

同理,我们可以访问更加复杂的属性,例如,要输出这个department中的属性chief中的

name属性的值,我们可以用:

${}

访问任何深度的对象属性都是可以的。例如

${ty1}

2.2多个属性在一个单元格中

在一个单元格,我们可以连接几个属性。例如:

Employee: ${} - ${} years

这样,我们得到的输出是:

Employee: John - 35 years

其中${}的值是John,同理${}的值是35.

3.使用标签

JXLS

允许在模板中使用预定义的

XML

标签来控制XLS转换行为。

3.1 jx:forEach标签

标签的典型用法如下:

${} | ${}

jx标签可以相互嵌套使用

如果你把jx:forEach标签的开始标签和结束标签放在同一行的话,JXLS会在同一行

上重复在jx:forEach标签的开始标签和结束标签之间的Excel单元格。

目前,如果你想要用jx:forEach标签重复Excel的行,那么你必须把jx:forEach

标签的开始标签和结束标签放在不同的行,把要重复的行包含在中间,jx:forEach标签

所在行的所有单元格都会被忽略。

以下是一个实例的截图:


本文标签: 标签 文件 格式 模板 使用