改造为循环创建sheet ExcelWriter writer = EasyExcel.write(response.getOutputStream(), clazz).build(); // 创建第一个sheet Sheet sheet1 = new Sheet(1, 0, clazz); sheet1.setSheetName("Sheet1"); writer.write(list1, sheet1); // 创建第二个sheet Sheet sheet2 = new Sheet(2, 0, clazz); sheet2.setSheetName("Sheet2"); writer.write(list2, sheet2); writer.finish();
时间: 2024-02-21 20:58:51 浏览: 219
可以将创建sheet的过程放在一个循环中,根据需要创建多个sheet,代码如下:
```
ExcelWriter writer = EasyExcel.write(response.getOutputStream(), clazz).build();
for (int i = 0; i < sheetList.size(); i++) {
Sheet sheet = new Sheet(i + 1, 0, clazz);
sheet.setSheetName("Sheet" + (i + 1));
writer.write(sheetList.get(i), sheet);
}
writer.finish();
```
其中,`sheetList` 是一个包含多个数据集合的列表,每个数据集合对应一个 sheet。在循环中,先创建一个 `Sheet` 对象,设置其编号和名称,然后根据当前的数据集合,使用 `writer.write()` 方法将数据写入对应的 sheet 中。最后,调用 `writer.finish()` 方法完成写入操作。
相关问题
整合代码 提供公共方法 // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename=btfhList.xlsx"); // 使用 Easy Excel 写入数据到 Excel 文件 ExcelWriter writer = EasyExcel.write(response.getOutputStream(), DaHfysLog.class).build(); WriteSheet sheet = EasyExcel.writerSheet("恢复用户列表").build(); writer.write(list, sheet); writer.finish();
可以将上述代码进行封装,提供一个公共方法,方便其他地方调用。示例代码如下:
```
public void exportExcel(HttpServletResponse response, List<Object> dataList, Class<?> clazz, String sheetName, String fileName) throws IOException {
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 使用 Easy Excel 写入数据到 Excel 文件
ExcelWriter writer = EasyExcel.write(response.getOutputStream(), clazz).build();
WriteSheet sheet = EasyExcel.writerSheet(sheetName).build();
writer.write(dataList, sheet);
writer.finish();
}
```
使用方法如下:
```
List<Object> dataList = new ArrayList<>();
// 添加数据到 dataList 中
exportExcel(response, dataList, DaHfysLog.class, "恢复用户列表", "btfhList.xlsx");
```
其中,`response` 是 HttpServletResponse 对象,`dataList` 是要导出的数据列表,`clazz` 是数据实体类的 Class 对象,`sheetName` 是 Excel 文件的 sheet 名称,`fileName` 是 Excel 文件的文件名。
代码如下,模板类字段是动态的,怎么改造代码: setResponseHeader("项目工单统计-工单统计工单位置", response); //表头 List<List<String>> header = new ArrayList<>(); header.add(Lists.newArrayList("位置", "一级位置")); header.add(Lists.newArrayList("位置", "二级位置")); header.add(Lists.newArrayList("位置", "三级位置")); header.add(Lists.newArrayList("工单总数", "工单总数")); header.add(Lists.newArrayList("进行中工单数", "进行中工单数")); header.add(Lists.newArrayList("已挂起工单数", "已挂起工单数")); header.add(Lists.newArrayList("挂单率", "挂单率")); header.add(Lists.newArrayList("已完成工单数", "已完成工单数")); header.add(Lists.newArrayList("完成率", "完成率")); //组装导出dto List<OrderLocationAnalysisDTO> list = this.getOrderLocationAnalysisDTOList(query); List<Integer> workOrderTypeList = new ArrayList<>(); //公区报单 workOrderTypeList.add(11); WriteTable head = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build(); ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build(); WriteTable data = EasyExcel.writerTable(1).needHead(Boolean.TRUE).head(header).build(); WriteSheet sheet = EasyExcel.writerSheet(0).needHead(Boolean.FALSE).sheetName("工单统计工单位置导出").build(); writer.write(concatHead("工单统计工单位置导出",query.getTimeRange().getStartTime(),workOrderTypeList), sheet, head); writer.write(list,sheet,data); writer.finish();
可以将模板类字段作为参数传入方法中,然后根据参数动态生成表头。修改后的代码如下:
```
public void exportOrderLocationAnalysis(HttpServletResponse response, String sheetName, List<String> templateFields, OrderLocationAnalysisQuery query) throws IOException {
//生成表头
List<List<String>> header = new ArrayList<>();
for (String field : templateFields) {
String[] fieldArr = field.split("-");
header.add(Lists.newArrayList(fieldArr[0], fieldArr[1]));
}
//组装导出dto
List<OrderLocationAnalysisDTO> list = this.getOrderLocationAnalysisDTOList(query);
List<Integer> workOrderTypeList = new ArrayList<>();
//公区报单
workOrderTypeList.add(11);
WriteTable head = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build();
ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build();
WriteTable data = EasyExcel.writerTable(1).needHead(Boolean.TRUE).head(header).build();
WriteSheet sheet = EasyExcel.writerSheet(0).needHead(Boolean.FALSE).sheetName(sheetName).build();
writer.write(concatHead(sheetName, query.getTimeRange().getStartTime(), workOrderTypeList), sheet, head);
writer.write(list, sheet, data);
writer.finish();
}
```
调用该方法时,传入模板类字段的列表即可:
```
List<String> templateFields = Arrays.asList("位置-一级位置", "位置-二级位置", "位置-三级位置", "工单总数-工单总数", "进行中工单数-进行中工单数", "已挂起工单数-已挂起工单数", "挂单率-挂单率", "已完成工单数-已完成工单数", "完成率-完成率");
exportOrderLocationAnalysis(response, "工单统计工单位置导出", templateFields, query);
```
阅读全文