场景
在工作中,导出Excel的场景经常出现,比如管理后台导出的功能、批量订正数据库等,在这些场景中的表格数据往往对应数据库的一条记录,表格格式十分简单。但是,类似导入导出都要用不同的代码实现。产品经常给笔者一个Excel表格数据,导入到数据库。每次都要写一堆功能、流程类似的导入导出代码,十分浪费时间。笔者这里是对Apache POI的封装。话不说,我们来体验一下。
使用
创建表格映射对象
@Data
public class Human {
@Column(title = "眼睛颜色")
private String eyeColor;
@Column(title = "头发颜色")
private String hairColor;
}
@Data
@ToString(callSuper = true)
public class Girl extends Human {
@Column(index = 0, title = "姓名")
private String name;
@Column(index = 1, title = "年龄")
private Integer age;
@Column(index = 2, title = "身高")
private Float height;
@Column(index = 2, title = "体重")
private Float weight;
}
导出演示
笔者在这里使用Junit Mock一些数据导出:
@Test
public void export1() {
//将导出文件放到编译文件目录下
String path = FileUtil.findRealPathByClasspath(this.getClass(), "/");
path = path + "excel/Girl_" + TimeUtil.getCurrentSeconds() + ".xlsx";
//mock 2000行数据
List<Girl> girls = this.mockGirls(2000);
//导出到指定文件目录
byte[] bytes = ExcelHelper.instance(Girl.class).input(girls).doExport();
NIOUtil.writeFile(path, bytes);
}
private List<Girl> mockGirls(int size) {
List<Girl> data = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
Girl girl = new Girl();
girl.setName("CY" + i);
girl.setAge(19);
girl.setHeight(1.68F + 0.001F * i);
girl.setWeight(45F + 0.001F * i);
girl.setHairColor("黑色");
girl.setEyeColor("灰色");
data.add(girl);
}
return data;
}
导出结果:
导入演示
笔者拿刚才导出数据进入导入并打印:
@Test
public void import1() {
InputStream is = this.getClass().getResourceAsStream("/excel/Girl.xlsx");
List<Girl> list = ExcelHelper.instance(Girl.class).input(is).doImport();
System.out.println(list);
}
导入结果:
从上述演示看,针对这种简单Excel报表,简单几行代码就能解决,如果你觉得还不错,可以通过Maven引用,或者github下载源码进行引用。
引入
maven
<dependency>
<groupId>com.github.rxyor</groupId>
<artifactId>carp-common-util</artifactId>
<version>1.0.3</version>
</dependency>
github
https://github.com/rxyor/carp.git (记得star, >_>!!!)