esaypoi 导出多个sheet

122 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 创建一个Workbook ,循环中 实例化一个ExportParams 设置每一个sheet的名称;实例化一个 ExcelExportService 调用其 createSheetForMap() 方法(这是核心)传入对应的工作簿的实例,导出的参数实例,表头,sheet的数据, 

public Workbook export(QuestionnaireResultQueryParam param) {
List result = questionnaireResultMapper.queryList(param);

// 循环的sheet  要导出几个sheet页
Map<String, List> maps = result.stream().collect(Collectors.groupingBy(QuestionnaireResultAndDetailPO::getQuestionnaireCode));

        Workbook workbook = new HSSFWorkbook();
for(Map.Entry<String, List> entry : maps.entrySet()) {
String questionnaireCode = entry.getKey();
List questionResult = entry.getValue();

            List beanList = getBeanList(questionnaireCode);
List<Map<String, Object>> sheetList = getSheetList(questionResult);

            ExportParams exportParams = new ExportParams();
exportParams.setSheetName(questionResult.get(0).getQuestionnaireDesc());

            ExcelExportService service = new ExcelExportService();
service.createSheetForMap(workbook,exportParams,beanList,sheetList);
}
return  workbook;
}

  1. 导出
@GetMapping(value = "/export")
public void export(HttpServletResponse response,Long areaId,String questionnaireCode) {
   QuestionnaireResultQueryParam param = getQuestionnaireResultQueryParam(areaId, questionnaireCode);
   Workbook workbook  = questionnaireResultService.export(param);
   String filename = DateTimeUtil.dateToStr(new Date(), "yyyyMMddHHmmss") + ".xls";
   downLoadExcel(filename,response,workbook);
}
private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
   try {
      response.setCharacterEncoding("UTF-8");
      response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
      response.setHeader("content-Type", "application/vnd.ms-excel");
      workbook.write(response.getOutputStream());
           workbook.close();
   } catch (IOException e) {
      throw new EvaluationException(e.getMessage());
   }
}