Open heiox opened 2 months ago
找到方案了吗。我的需求和你一样,但是我的sheet数量是不确定的
InputStream inputStream = FileUtils.getExportTemplate("部门车资.xlsx");
ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream()).withTemplate(inputStream);
ExcelWriter excelWriter = writerBuilder.build();
for (String dept : deptSendCarMap.keySet()) {
List<CarfareExcel> deptCarfareList = deptSendCarMap.get(dept);
// 省略其他数据构建
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(Collections.singletonMap("dept", dept), fillConfig, writeSheet);
excelWriter.fill(deptCarfareList, fillConfig, writeSheet);
Map<String, Object> map = new HashMap<>();
map.put("totaltoll", totaltoll);
map.put("cost", cost);
map.put("invoice", invoice);
excelWriter.fill(map, writeSheet);
}
excelWriter.finish();
这样写只会重复在模版的sheet里写。得到的数据只有最后一个deptCarfareList的 如果这样写:WriteSheet writeSheet = EasyExcel.writerSheet(dept).build(); 对应的sheet是创建了,但是里面没有任何数据,因为新创建的sheet里并没有模版
没有很好的解决方案,我是在填充之前,按照所需先复制sheet:workbook.cloneSheet
没有很好的解决方案,我是在填充之前,按照所需先复制sheet:workbook.cloneSheet
大佬,具体怎么写的,这样也行,起码能用
成功了,完整代码放这里,供后人参考
InputStream inputStream = FileUtils.getExportTemplate("部门车资.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
List<String> deptNames = new ArrayList<>(deptSendCarMap.keySet());
for (int i = 0; i < deptNames.size(); i++) {
if (i == 0) {
workbook.setSheetName(0, deptNames.get(0));
} else {
workbook.cloneSheet(0, deptNames.get(i));
}
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(bis).build();
for (int i = 0; i < deptNames.size(); i++) {
String dept = deptNames.get(i);
List<CarfareExcel> deptCarfareList = deptSendCarMap.get(dept);
// 省略其他数据构建
WriteSheet writeSheet = EasyExcel.writerSheet(i).build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(Collections.singletonMap("dept", dept), fillConfig, writeSheet);
excelWriter.fill(deptCarfareList, fillConfig, writeSheet);
Map<String, Object> map = new HashMap<>();
map.put("totaltoll", totaltoll);
map.put("cost", cost);
map.put("invoice", invoice);
excelWriter.fill(map, writeSheet);
}
excelWriter.finish();
目前是需要在模板文件中,将sheet模板复制多个。