一、介绍
官网 https://easyexcel.opensource.alibaba.com/
EasyExcel是阿里巴巴开源的,一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。
其特点是:
- 快速的读取excel中的数据。
- 映射excel和实体类,让代码变的更加简洁。
- 在读写大文件的时候使用磁盘做缓存,更加的节约内存。
二、使用EasyExcel写
2.1 导入依赖
<!-- easyexcel依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.2 导出表格极简入门
①声明一个简单的对象
@Getter
@Setter
@EqualsAndHashCode
public class DemoData {
@ExcelProperty("字符串标题") //这里默认为value属性赋值,value为导出的表格的表头
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
@ExcelIgnore //忽略这个字段,生成的表格中就不会有该字段
private String ignore;
}
②写一个简单的表格导出案例
public class SimpleWriteTest {
@Test
public void simpleWrite(){
//1.模拟要写出数据
List<DemoData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
//2.设置写出的文件路径
String fileName = "demo1.xlsx";
//3.利用EasyExcel写出,会自动关流
//write方法的参数1:文件路径,参数2:模板对象类型
EasyExcel.write(fileName, DemoData.class)
.sheet("模板") //sheet页名字
.doWrite(list); //要写出的数据
}
}
这样,就会在当前项目目录下生成名为demo1.xlsx
的表格,内容如下:
2.3 根据参数导出指定属性
案例1:指定哪些属性不需要导出到表格中,仅导出剩余属性。
public class SimpleWriteTest {
@Test
public void excludeWrite(){
//1.模拟要写出数据
List<DemoData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
//2.设置导出过程中剔除的字段
Set<String> excludeColumnFiledNames = new HashSet<String>();
excludeColumnFiledNames.add("date");//这里剔除date属性
//3.设置写出的文件路径
String fileName = "demo2.xlsx";
//4.写出
EasyExcel.write(fileName, DemoData.class)
.excludeColumnFieldNames(excludeColumnFiledNames) //将要剔除的列设置给EasyExcel
.sheet("模板")
.doWrite(list);
}
}
结果如下,就没有了日期列。
案例2:指定仅导出哪些属性,剩余属性不导出。
public class SimpleWriteTest {
@Test
public void IncludeWrite(){
//1.模拟要写出数据
List<DemoData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData(