项目重构,从poi升级为easyExcel。
看了下官网,先写了简单导出示例。后续补充下多sheet页导出,以及导入。
ExcelUtil.java:
/**
* 导出数据为excel文件
*
* @param filename 文件名称
* @param dataResult 集合内的bean对象类型要与clazz参数一致
* @param clazz 集合内的bean对象类型要与clazz参数一致
* @param response HttpServlet响应对象
*/
public static void export(String filename, List<?> dataResult, Class<?> clazz, HttpServletResponse response) {
response.setStatus(200);
OutputStream outputStream = null;
ExcelWriter excelWriter = null;
try {
if (StringUtils.isBlank(filename)) {
throw new RuntimeException("'filename' 不能为空");
}
String fileName = filename.concat(".xlsx");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
outputStream = response.getOutputStream();
excelWriter = EasyExcel.write(outputStream).build();
// 先用 filename 作为 sheetName
WriteSheet writeSheet1 = EasyExcel.writerSheet(0, filename).head(clazz).build();
// 写出数据
excelWriter.write(dataResult, writeSheet1);
} 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);
}
}
}
}
实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@ExcelProperty("学生姓名")
private String sName;
@ExcelProperty("学生性别")
private String sSex;
@ExcelProperty("学生年龄")
private String sAge;
@ExcelProperty("学生住址")
private String sAddres;
@ExcelProperty(value = "入学时间",format = "yyyy-MM-dd HH:mm:ss")
private Date enrolTime;
}
测试:
@RequestMapping(value = "/export", method = RequestMethod.GET)
public void export(Long size, HttpServletResponse response){
ExcelUtil.export("学生信息",getStudents(),Student.class,response);
}
// 模拟根据条件在数据库查询数据
public List<Student> getStudents() {
ArrayList<Student> students = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setSName("菜花"+i);
student.setSAge(i+"");
student.setSSex("男");
student.setSAddres("速度干涸三个房间"+i);
student.setEnrolTime(new Date());
students.add(student);
}
return students;
}