上篇文章只是对easyExcel简单导出应用,这次做个小升级:
1)支持全部sheet页导出
2)支持需要的sheet页导出
1、公共导出接口类:
public interface ExportInterface {
List<?> getData();
String getFileName();
Class<?> getEntityClazz();
}
2、实体类:上篇文章的学生类继续使用,这次再增加一个老师类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
@ExcelProperty("老师姓名")
private String tName;
@ExcelProperty("老师性别")
private String tSex;
@ExcelProperty("老师年龄")
private String tAge;
@ExcelProperty("老师住址")
private String tAddres;
}
3、公共导出接口“学生”实现类:
@Service
public class StudentExportImpl implements ExportInterface {
@Override
public List<?> getData() {
// 模拟根据条件在数据库查询数据
ArrayList<Student> students = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setSName("学生"+i);
student.setSAge(i+1+"");
student.setSSex("女");
student.setSAddres("库房微小差距"+i);
student.setEnrolTime(new Date());
students.add(student);
}
return students;
}
@Override
public String getFileName() {
return "学生基本信息";
}
@Override
public Class<?> getEntityClazz() {
return Student.class;
}
}
4、公共导出接口“老师”实现类:
@Service
public class TeacherExportImpl implements ExportInterface {
@Override
public List<?> getData() {
// 模拟根据条件在数据库查询数据
ArrayList<Teacher> teachers = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
Teacher teacher = new Teacher();
teacher.setTName("老师"+i);
teacher.setTAge(i+20+"");
teacher.setTSex("女");
teacher.setTAddres("文库发货"+i);
teachers.add(teacher);
}
return teachers;
}
@Override
public String getFileName() {
return "老师基本信息";
}
@Override
public Class<?> getEntityClazz() {
return Teacher.class;
}
}
6、ExcelUtil 增加多sheet页导出方法:
public static void moreSheetExport(List<ExportInterface> exportInterfaces, HttpServletResponse response) {
response.setStatus(200);
OutputStream outputStream = null;
ExcelWriter excelWriter = null;
String fileName = "导出.xlsx";
try {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
outputStream = response.getOutputStream();
excelWriter = EasyExcel.write(outputStream).build();
for (ExportInterface exportInterface : exportInterfaces) {
WriteSheet writeSheet = EasyExcel.writerSheet(exportInterface.getFileName()).head(exportInterface.getEntityClazz()).build();
excelWriter.write(exportInterface.getData(), writeSheet);
}
} catch (Exception e) {
System.out.println("导出excel数据异常:"+e);
throw new RuntimeException(e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
System.out.println("导出excel数据异常:"+e);
}
}
}
}
7、Controller增加接口:
@Resource
private List<ExportInterface> exportInterfaces;
@GetMapping(value = "/allExport")
public void allExport(HttpServletResponse response){
ExcelUtil.moreSheetExport(exportInterfaces,response);
}
// 支持导出 特定sheet页
@PostMapping(value = "/moreSheetExport")
public void moreSheetExport(@RequestBody List<String> needSheetNames, HttpServletResponse response){
List<ExportInterface> needExportInterface = new ArrayList<>();
for (ExportInterface exportInterface : exportInterfaces) {
if(needSheetNames.contains(exportInterface.getFileName())) {
needExportInterface.add(exportInterface);
}
}
ExcelUtil.moreSheetExport(needExportInterface,response);
}