java项目中使用 jxls 插件 导出excel报表
硅谷探秘者
2021-05-09发表
算法基础
0
0
2435
什么是jxls
jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局。
其实java中成熟的excel导出工具有pol、jxl,但他们都是使用java代码的方式来导出excel,编码效率很低且不方便维护。
jxls是通过预制excel模板,然后通过jxls相应API将我们应用程序的数据结合模板格式输出到相应的excel文件中,从而形成报表。
下面就以导出一个简单的员工表信息为例说明,并贴出java的实现代码。
pom依赖
项目pom文件中添加如下依赖
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.9.0</version>
</dependency>
制作excel模板
excel模板如下:
员工表 |
编号 | 姓名 | 简介 |
${v.id} | ${v.name} | ${v.text} |
当然没有那么简单,有两个地方还要添加批注。
第一个是必须添加的批注,就是在第一行第一列的单元格上添加,说明生成单元格作用的范围。例如:
jx:area(lastCell="C3")
![]()
第二个就是需要循环遍历数据集合的批注,具体如下:
jx:each(items="data" var="v" lastCell="C3")
![]()
解释一下,each一看就是到干啥的不多解释,items是指定需要遍历的数据集合,var是指定一个别名,在单元格中做标记,方式如${v.id}。lastCell是指定循环作用的单元格范围例如C3就是第C列,第3行。
java代码实现
实体类
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Entity {
private Integer id;
private String name;
private String text;
}
主要实现
import club.jiajiajia.jxls.config.AutoRowHeightCommand;
import club.jiajiajia.jxls.entity.Entity;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 一般导出(导出一个列表数据)
*/
public class Test2 {
public static void main(String[] args) throws Exception{
InputStream templateIn= new ClassPathResource("template/template2.xlsx").getInputStream();
OutputStream os =new FileOutputStream("D:\\data\\temp2.xlsx");
Context context = new Context();
List<Entity> data = new ArrayList<>();
data.add(new Entity(1,"张三","张三的简介"));
data.add(new Entity(2,"李四","里斯的简介"));
data.add(new Entity(3,"王五","王五的简介"));
data.add(new Entity(4,"赵六","赵六的简介"));
context.putVar("data", data);
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
jxlsHelper.getAreaBuilder().getTransformer();
jxlsHelper.processTemplate(templateIn, os, context);
}
}
这只是一个简单的导出示例,其实还有很多需要注意的点没有说到。如果需要自定义一些标注,以及怎样使用公式等,请参照我写的一个demo。github地址如下:https://github.com/18438301593/jxls2.git
还有一个是另一个版本的:https://github.com/18438301593/jxls.git,
模板和代码github里面都有。