1.引入包 <!-- 阿里开源 easyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.2</version> </dependency>
2.实体 @ColumnWidth(15)//宽度 @ExcelProperty(value = "姓名")//标题 private String name; @ExcelIgnore//忽略 private Short sex; 3.简单导出 try { String fileName = URLEncoder.encode("特种信息", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), SpecialCertDTO.class).sheet(fileName).doWrite(page.getRecords()); } catch (Exception e) { log.error(Exceptions.getStackTraceAsString(e)); }
4.大数据导出
IPage<ProjectDTO> page = statisticsService.projectList(requestDTO); // 每次写入数量 long size = page.getSize(); // 总数据数量 long totalCount = page.getTotal(); OutputStream outputStream = null; try { //文件名 String fileName = URLEncoder.encode("工程信息", "UTF-8"); //计算需要写入的数量 Long sheetNum = totalCount / size + 1; outputStream = response.getOutputStream(); //必须放到循环外,否则会刷新流 ExcelWriter excelWriter = EasyExcel.write(outputStream).build(); //创建Sheet WriteSheet sheet = new WriteSheet(); sheet.setSheetName("Sheet1"); sheet.setSheetNo(1); WriteSheet writeSheet = EasyExcel.writerSheet(1, "Sheet" + (1)).head(ProjectDTO.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); excelWriter.write(page.getRecords(), writeSheet); //循环写入次数: j的自增条件是当不是最后一个Sheet的时候写入次数为正常的每个Sheet写入的次数,如果是最后一个就需要使用计算的次数lastSheetWriteCount for (int j = 1; j < sheetNum; j++) { requestDTO.setPage(j + 1); page = statisticsService.projectList(requestDTO); //写入到excel: WriteSheet writeSheet1 = EasyExcel.writerSheet(1, "Sheet1").head(ProjectDTO.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); excelWriter.write(page.getRecords(), writeSheet1); } // 下载EXCEL,返回给前段stream流 response.setContentType("application/octet-stream"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); excelWriter.finish(); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (outputStream != null) { outputStream.close(); } }