[alibaba/easyexcel]对于一个实体有多个场景的导出,建议如下

2024-05-11 411 views
4

导出文件写法: // 写法1 String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 // 如果这里想使用03 则 传入excelType参数即可 EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

// 写法2
fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去写
ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
excelWriter.write(data(), writeSheet);
// 千万别忘记finish 会帮忙关闭流
excelWriter.finish();

建议描述 导出是可以这么理解,data()是导出的数据源,DemoData.class是导出时真正的excel字段及样式的映射,实际上,导出字段、顺序必须是data().getClass的类型中提取的数据,建议导出的字段、字段顺序从DemoData.class获取,包含在DemoData.class就是我需要的真正字段

回答

8

建议:oneRowData.getClass()修改为HeadKindEnum.CLASS.getClass() // Finish if (beanMapHandledSet.size() == beanMap.size()) { return; } Map<String, Field> ignoreMap = writeContext.currentWriteHolder().excelWriteHeadProperty().getIgnoreMap(); initSortedAllFiledMapFieldList(HeadKindEnum.CLASS.getClass(), sortedAllFiledMap);

4

这个是兼容 如果没有传headclass的情况的

6

这里2个情况 1 首先是head的去排序&处理 2 如果没处理完 再 oneRowData 的去处理