问题场景:
将两个不同的集合,导出到同一个Excel中的两个不同的sheet。
sheet1:
姓名 | 成绩 |
善傲旋 | 89 |
厚雨双 | 92 |
表俊哲 | 98 |
葛家 | 99 |
崔语林 | 100 |
sheet2:
班级 | 平均分 | other1 | other2 |
一班 | 98.5 | 其他 | 数据 |
二班 | 95.8 | 其他 | 数据 |
三班 | 99.3 | 其他 | 数据 |
四班 | 97.9 | 其他 | 数据 |
解决问题:
第一个实体类:
@Data
public class firstVO {
@Schema(description = "姓名")
@ExcelProperty("姓名")
private String name;
@Schema(description = "成绩")
@ExcelProperty("成绩")
private String score;
}
第二个实体类:
@Data
public class secondVO {
@Schema(description = "班级")
@ExcelProperty("班级")
private String class;
@Schema(description = "平均分")
@ExcelProperty("平均分")
private String ave;
@Schema(description = "other1")
@ExcelProperty("other1")
private String other;
@Schema(description = "other2")
@ExcelProperty("other2")
private String data;
}
代码完整导出操作:
public void export(HttpServletRequest request, HttpServletResponse response) {
List<firstVO> firstVOList = firstMapper.getList();
List<secondVO> secondVOList = secondMapper.getList();
FrameHttpUtil.setExportFileName(request, response, "信息导出.xlsx");
OutputStream out=null;
ExcelWriter excelWriter = null;
try {
out = response.getOutputStream();
excelWriter = EasyExcel.write(out, firstVO.class).
registerWriteHandler(ExcelCellStyleStrategy.horizontalCellStyleStrategyBuilder()).
build();
WriteSheet writeSheet1 = EasyExcel.writerSheet(0).head(createHeadString1()).build();
writeSheet1.setSheetName("第一个sheet");//这里表头重新定义了
excelWriter.write(firstVOList,writeSheet1);
WriteSheet writeSheet2 = EasyExcel.writerSheet(1).head(createHeadString2()).build();//这里表头重新定义了
writeSheet2.setSheetName("第二个sheet");
excelWriter.write(secondVOList,writeSheet2);
}catch(Exception e){
throw new Exception(e);
}finally {
if (excelWriter != null) {
excelWriter.finish();
}
IOUtils.closeStream(out);
}
}
//这是第一个sheet表头
private List<List<String>> createHeadString1() {
List<List<String>> headList = new ArrayList<>();
headList.add(Arrays.asList("姓名", "姓名"));
headList.add(Arrays.asList("成绩", "成绩"));
return headList;
}
//这是第二个sheet表头
private List<List<String>> createHeadString2() {
List<List<String>> headList = new ArrayList<>();
headList.add(Arrays.asList("班级", "班级"));
headList.add(Arrays.asList("平均分", "平均分"));
headList.add(Arrays.asList("other1", "other1"));
headList.add(Arrays.asList("other2", "other2"));
return headList;
}
***温馨提示***:
综上所述,导出的是不同的实体集合,且sheet数量少,如果导出的sheet数量过多,可以定义一个循环,具体可以参考👇参考文档。
参考文档:写Excel | Easy Excel
欢迎指出问题、评论