public void exportFormDataGatherExcel(FormDataGatherPageReqVO reqVO, HttpServletResponse response) { try { response.setCharacterEncoding("utf-8"); String fileName = "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 这里 指定文件 try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).autoCloseStream(false).build()) { // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 for (int i = 0; i < 5; i++) { List<String> headList = new ArrayList<>(); headList.add("h1"); headList.add("h2"); headList.add("h3"); headList.add("h4"); // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class // 实际上可以一直变 WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build(); writeSheet.setHead(head(headList)); // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 List<List<String>> data = new ArrayList<>(); List<String> lista = new ArrayList<>(); lista.add("C1"); lista.add("C2"); lista.add("C3"); lista.add("C4"); lista.add("C5"); data.add(lista); excelWriter.write(data, writeSheet); } } response.addHeader("Content-Disposition", "inline;filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1")); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage(),e); } }
public static List<List<String>> head(List<String> headList) { List<List<String>> list = new ArrayList<>(); for (String value : headList) { List<String> head = new ArrayList<>(); head.add(value); list.add(head); } return list; }