前言
相信现在很多搞后端的同学大部分做的都是后台管理系统,那么管理系统就肯定免不了 Excel
的导出导入功能,今天我们就来介绍一下 Java
如何实现 Excel
的导入导出功能。
Java领域解析,生成Excel比较有名的框架有Apache poi,Jxl等,但他们都存在一个严重的问题就是非常的耗内存,如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc.
EasyExcel
是阿里巴巴开源的一个excel处理框架,以使用简单,节省内存著称,今天我们来使用阿里巴巴开源的EasyExcel
框架来实现Excel
的导入导出功能。
本文主要有以下几个知识点:
从Excel读取数据
导出数据到Excel
Excel模板填充
正文
首先第一步得先导入EasyExcel
的Jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.4</version>
</dependency>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
导出数据到Excel.
接下来看看如何导出数据到到Excel
中,有两种写法,一种是不创建对象的写入,另一种是根据对象写入。
- 不创建对象的写入
@SpringBootTest
class Tests {
/*
* 不创建对象的写
*/
@Test
public void test() {
// 生成Excel路径
String fileName = "C:\\Users\\likun\\Desktop\\测试.xlsx";
EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());
}
private List<List<String>> head() {
List<List<String>> list = new ArrayList<>();
List<String> head0 = new ArrayList<>();
head0.add("姓名");
List<String> head1 = new ArrayList<>();
head1.add("年龄");
List<String> head2 = new ArrayList<>();
head2.add("生日");
list.add(head0);
list.add(head1);
list.add(head2);
return list;
}
private List<List<Object>> dataList() {
List<List<Object>> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<Object> data = new ArrayList<>();
data.add("张三");
data.add(25);
data.add(new Date());
list.add(data);
}
return list;
}
}
代码很简单,核心就一句代码:
EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());
head()
用来放表头数据,dataList()
用来放每一行的数据。
看下效果图:
如果想设置自动列宽可以这样子:
EasyExcel.write(fileName).head(head()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet("模板").doWrite(dataList());
效果图:
- 根据对象写入
接下来是根据对象导入Excel
,首先我们要定义一个对象:
@Data
public class User {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("性别")
private String sex;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("身份证")
private String cardid;
}
使用@ExcelPr