EasyExcel-Multi-Sheet-Entity-Data-Read
- Easyexcel(1-注解介绍与使用)
- Easyexcel(2-文件多Sheet、不同对象、多数据读取)
- Easyexcel(3-文件导出)
- Easyexcel(4- 模板文件定义与导出)
- Easyexcel(5-自定义列宽)
- Easyexcel(6-单元格合并)
- Easyexcel(7-自定义样式)
- Easyexcel(8-通用工具类)
同步读取
读取单个Sheet
- 通过
sheet方法指定对应的Sheet名称或下标读取文件信息 - 通过
doReadSync方法实现同步读取
@Data
public class UserExcel {
@ExcelIgnore
private Integer id;
@ExcelProperty(index = 0, value = "姓名")
private String name;
@ExcelProperty(index = 1, value = "年龄")
private Integer age;
@DateTimeFormat(value = "yyyy-MM-dd")
@ExcelProperty(index = 2, value = "出生日期")
private Date birthday;
}
@RestController
public class Test02Controller {
/**
* 上传单个文件, 同步读取excel文件
*/
@PostMapping("/uploadFile")
public void uploadFile(MultipartFile file) {
try (InputStream in = file.getInputStream()) {
List<UserExcel> userExcelList = EasyExcel.read(in)
// 读取第一个sheet
.sheet(0)
// 如果第一行才是标题,第二行是数据,从第二行开始读 取
.headRowNumber(1)
.head(UserExcel.class)
.doReadSync();
for (UserExcel userExcel : userExcelList) {
System.out.println(userExcel);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
读取多个Sheet( 同一个对象)
使用 doReadAllSync 方法读取所有Sheet,适用于每个Sheet的对象都一致的情况
@PostMapping("/uploadFile2")
public void uploadFile2(MultipartFile file) {
try (InputStream in = file.getInputStream()) {
List<UserExcel> userExcelList = EasyExcel.read(in)
// 如果第一行才是标题,第二行是数据,从第二行开始读取
.headRowNumber(1)
.head(UserExcel.class)
.doReadAllSync();
for (UserExcel userExcel : userExcelList) {
System.out.println(userExcel);
}
} catch (Exception e) {
e.printStackTrace();
}
}
读取多个Sheet(不同对象)
当每个Sheet的对象不一致的情况下,使用 doReadAllSync 方法无法指定每个Sheet的对象,可以依次读取Sheet进行解析
注意:依次读取Sheet会出现重复读取流对象的情况,而一个流对象只能读取一次,重复使用会导致异常
@PostMapping("/uploadFile4")
public void uploadFile4(MultipartFile file) {
InputStream in = null;
try {
in = file.getInputStream();
List<UserExcel> userExcelList1 = EasyExcel.read(in)
// 读取第一个sheet
.sheet(0)
// 如果第一行才是标题,第二行是数据,从第二行开始读取
.headRowNumber(1)
.head(UserExcel.class)
.doReadSync();
// 读取剩余的sheet
in = file.getInputStream();
List<UserExcel> userExcelList2 = EasyExcel.read(in)
.sheet(1)
// 如果第一行才是标题,第二行是数据,从第二行开始读取
.headRowNumber(1)
.head(UserExcel.class)
.doReadSync();
List<UserExcel> userExcelList = new ArrayList<>();
userExcelList.addAll(userExcelList1);
userExcelList.addAll(userExcelList2);
for (UserExcel userExcel : userExcelList) {
System.out.println(userExcel);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}