目录
EasyExcel多sheet导入
public String XXX(HttpServletResponse response, XxxDTO xxxDTO) {
ExcelWriter excelWriter = null;
try {
//设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
//获取数据源
List<List<Object>> returnVOS = selectXxx(xxxDTO);
//设置文件名称
String fileName = "我的EXCEL文件";
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
excelWriter = EasyExcel.write(response.getOutputStream()).build();
//构建表1
WriteSheet sheet1 = EasyExcel.writerSheet(0, "xxx信息导出")
//设置列宽
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(18))
.build();
XxxDTO xxxDTOCur = new XxxDTO();
BeanUtils.copy(xxxDTO, xxxDTOCur);
//抽取不需要的表头,根据条件
xxxDTOCur.setXxx(null);
xxxDTOCur.setXxx1(null);
WriteTable table1 = EasyExcel.writerTable(0)
//设置表头
.head(setHeads(xxxDTOCur ))
.needHead(true)
.build();
//写入每个sheet中的每个表,excelWriter.write(数据源, sheet1, table1);
excelWriter.write(returnVOS, sheet1, table1);
//根据前端筛选条件,添加表2
if (!StringUtils.isEmpty(xxxDTO.getXxx())) {
//构建表1
WriteSheet sheet2 = EasyExcel.writerSheet(1, "xxx信息导出")
.build();
List<XxxVO> xxxVOS= selectXxx(xxxDTO);
WriteTable table2 = EasyExcel.writerTable(1)
//设置表头
.head(XxxVO.class)
.needHead(true)
.build();
excelWriter.write(XxxVOS, sheet2, table2);
}
} catch (Exception e) {
log.error("XXX error", e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
return ResponseMsg.SUCCESS;
}
反射动态设置表头
//根据筛选条件设置表头
private List<List<String>> setHeads(Object o) {
List<List<String>> headTitles = new ArrayList<>();
Class clazz = o.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
try {
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
if (!ObjectUtils.isEmpty(declaredField.get(o)) && declaredField.getGenericType().toString().equals("class java.lang.String")) {
List<String> row = new ArrayList<>();
String str = (String) declaredField.get(o);
row.add(str);
headTitles.add(row);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return headTitles;
}