一、导入依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>

二、编写实体类

用于接收Excel表中的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
public class ExcelSubjectData {

// 第一列对应的属性(用于读)
@ExcelProperty(index = 0)
// 表头对应的名称(用于写)
@ExcelProperty("一级分类")
private String oneSubjectName;

// 第二列对应的属性
@ExcelProperty(index = 1)
// 表头对应的名称(用于写)
@ExcelProperty("一级分类")
private String twoSubjectName;
}

三、实现读写操作

读取

编写一个类继承AnalysisEventListener,其中T是上一步创建的用于封装excel数据行的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* Created by IntelliJ IDEA.
* User: Zengc
* Date: 2021/7/4
* Time: 21:01
**/
@Data
@Component
public class SubjectExcelListener extends AnalysisEventListener<ExcelSubjectData> {

/**
* 一行一行读取表格内容
* @param data 当前行数据封住的对象
* @param analysisContext 封装了sheet等信息
*/
@Override
public void invoke(ExcelSubjectData data, AnalysisContext analysisContext) {
if (data == null){
// 抛异常 TODO
return ;
}
// TODO 读取当前行信息,随后处理
}

@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {

}

// 读取表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {

}

}

业务层

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 读取Excel内容
* @param file 需要读取的Excel文件,从Controller中接收
*/
public void importSubjectData(MultipartFile file) {
InputStream is = null;
try {
is = file.getInputStream();
EasyExcel.read(is, ExcelSubjectData.class,new SubjectExcelListener()).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}

写入

写法一:

1
2
3
4
5
6
7
8
// 其中T为用于写入Excel文件的类,此例为ExcelSubjectData
public void writeExcel(List<T> list) {
// 待写入文件的路径
String fileName = "F:\\11.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, T.class).sheet("写入方法一").doWrite(list);
}

写法二:

1
2
3
4
5
6
7
8
9
10
public void writeExcel(List<T> list) {
// 写法2,方法二需要手动关闭流
String fileName = "F:\\12.xlsx";
// 这里 需要指定写用哪个class去写
ExcelWriter excelWriter = EasyExcel.write(fileName, T.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("写入方法二").build();
excelWriter.write(list, writeSheet);
/// 千万别忘记finish 不会帮忙关闭流
excelWriter.finish();
}

最后附上官网:EasyExcel