easypoi 4.2.0 大数据导出
excel 导出大数据
pom 文件
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.2.0</version> </dependency>
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>4.2.0</version> </dependency>
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>4.2.0</version> </dependency>
2 实体
2 service
看了半天的网上示例,迷迷糊糊的,自己用了才知道,并没有那么玄乎。
@Override
public void downLoadList(Map<String, Object> param, HttpServletResponse response) { //param 这里是我的入参 可以替换你自己的入参 String exportName ="券领取记录";
ExportParams exportParams = new ExportParams(exportName,exportName, ExcelType.XSSF); //总页数 可替换 int totalPage = BigDecimal.valueOf(Integer.parseInt(param.get("page_size").toString())).divide(BigDecimal.valueOf(1000), 0, BigDecimal.ROUND_UP).intValue(); //每页的条数 可替换 int pageSize = 1000; Workbook workbook = null; workbook = ExcelExportUtil.exportBigExcel(exportParams, WebMemberCouponExcelDTO.class, new IExcelExportServer() { @Override public List<Object> selectListForExcelExport(Object obj, int page) { //这里page默认是1 if (page>totalPage){ return null; } List<Object> list = new ArrayList<>(); //我这里的分页只是我这边需求是这样的 可以替换 param.put("page_num",String.valueOf(page)); param.put("page_size",String.valueOf(pageSize)); //可以抽出一个方法,返回的list 集合,入参由你的方法入参替换 getList是我的一次返回数据 if (CollectionUtils.isEmpty(getList(param))){ return null; } list.addAll(getList(param));return list; } }, totalPage); ExcelUtils.downLoadExcel("das.xlsx",response, workbook); }
private List<WebMemberCouponExcelDTO> getList(Map<String, Object> param) {
//这里是你的查询数据返回 入
//这里是一次分页查询的数据
例如 第一页 10条 返回的10条数据
return webMemberCouponExcelDTOS;
}
他的内部类进行循环
所以说,当我们使用
ExcelExportUtil.exportBigExcel 这个方法的时候,只要控制好 每次循环的分页变化就行,他就会 循环处理我们内部类的逻辑。
其实很简单的。