jxls 2使用分享

首先,假设我们打算将一个存放Employee对象的列表输出到Excel中。Employee类定义如下:

 

publicclassEmployee{
  privateString name;
  privateDate birthDate;
  privateBigDecimal payment;
  privateBigDecimal bonus;
  // ... constructors// ... getters/setters
}
 

为了使用Jxls将这个对象列表输出到excel中,我们需要:

1、添加Jxls依赖的jar包到你的工程中。

2、使用特殊标注创建一个Excel模板。

3、使用Jxls API将Employee数据填充到准备好的模板中。

 

下面让我们详细看一下每一步使用方法:

添加Jxls依赖的jar包到你的工程中
最简单地使用方法是通过Maven,以添加所需的包到配置文件方式,导入。
可以在Centeral Maven库中获得Jxls jar包。
我们需要添加下面core Jxls依赖:
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls</artifactId>
  <version>2.3.0</version>
</dependency>
 
或者,你通过Sourceforge下载Jxls分发包,使用分发包里的jar。
除些之外,我们需要添加Jxls transformer engine的实现包,用于实现Java下面操作excel。
 
由于Jxls不依赖于任何特定的java操作excel包,Jxls定义了一些公共接口。现在Jxls分别实现了两种该接口的包:Apache POI与Java Excel API,分发在不同的jar中。
为了使用Apache POI,需要添加如下依赖:
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls-poi</artifactId>
  <version>1.0.9</version>
</dependency>
 
为了使用Java Excel API,需要添加如下依赖:
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls-jexcel</artifactId>
  <version>1.0.6</version>
</dependency>
 
 
创建Excel模板
模板是写着Jxls如何输出数据的带有特殊标注的excel文件。
Jxls 提供了用于解析模板并提取命令的内部标记处理器。
如果你需要,你也可以自定义的标记处理器。同时,你可以自定义标记,只要保证按照合理方式转换成Jxls命令。
 
让我们一起看一下Jxls内部的标记处理器。
Jxls默认支持Apache JEXL表达式语言,用于在模板中操作Java对象的属性及方法。该对象必须以某一key保存到Jxls的Context中。例如,我们想将员工的名字输出到excel中,只需要将“${employee.name}”写入单元格中。基本上,只要在Jxls表达式两边加上“${”、“}”,当然保证在Context中可以通过“ employee”取到Employee对象。
 
可以配置属性标识,你也可以决定使用“[[employee.name]]”作为属性标识。
最终模板如下:
Template
 
如上所示,在模板中,第4行单元格,我们用JEXL表达式引入了员工对象属性。
单元格A1包含了 jx:area(lastCell="D4")内容的标注。它定义了模板的根区域A1:D4。
单元格A4的标注用“jx:each(items="employees" var="employee" lastCell="D4")”定义了Jxls Each循环命令。Each命令遍历Jxls Context中“employees”对应的列表,并将列表中的每个值以“employee”的键存入Context中(通过var定义)。Each命令的内容区域是A4:D4(通过lastCell定义),每一个context的Employee对象都会复制该区域并处理内容。
 
这个例子使用了XlsCommentAreaBuilder通过模板创建Jxls区域。只要定义Jxls命令到批注中,就可以。如果你通过Java代码定义了命令,你只要将批注删除即可。
使用Jxls API处理模板
下面你可以看到如何通过Jxls API处理excel模板:
...
  logger.info("Running Object Collection demo");
  List<Employee> employees = generateSampleEmployeeData();
  try(InputStreamis=ObjectCollectionDemo.class.getResourceAsStream("object_collection_template.xls")){
    try(OutputStream os =newFileOutputStream("target/object_collection_output.xls")){
      Context context =newContext();
      context.putVar("employees", employees);
      JxlsHelper.getInstance().processTemplate(is, os, context);
    }
}
...
 
上面例子中我们在classpath中读取模板文件 object_collection_template.xls。目标文件会被输出到 target/object_collection_output.xls
一行代码处理主要工作。
JxlsHelper默认输出到模板所在的表单。
你也可以通过下面的方便将结果输出到其它表单。
下面结果会被保存在的Result表单A1单元上。
Output

猜你喜欢

转载自dongmj.iteye.com/blog/2354552