情景:我们在做项目中,有个20万左右的数据要导出来,我们查出数据库要导出的话,系统就卡死了,
我们分批查询,分批导出

public void exportDmfAll(HttpServletResponse response,ProcessCompletionVo vo) {

    ExcelWriter excelWriter = null;
    try {
        String fileName = "数据导出";
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" +
                new String(fileName.getBytes("UTF-8"), "ISO8859-1") + ".xlsx");
        excelWriter = EasyExcel.write(response.getOutputStream()).build();

        Integer page = 1;
        while (true) {
            vo.setPageNum(page);
            vo.setPageCount(5000);
            R r = this.getBusinessArea(vo);

            List<DmFbillprocessNodeDetailModel> list = ((Page<DmFbillprocessNodeDetailModel>) r.get("data")).getContent();
            if (list.size()==0) {
                return;
            }
            R typeFlagR = getTypeFlagByBill(vo.getProcessName());
            String typeFlag = "";
            if (!ObjectUtils.isEmpty(typeFlagR.get("business_type"))) {
                typeFlag = String.valueOf(typeFlagR.get("business_type"));
            }
            //if ("国内".equals(typeFlag)) {
            List<DmfAllExcelOne> listResult = new ArrayList<>();

            for (DmFbillprocessNodeDetailModel dmFprocessNodeReportModel : list) {
                DmfAllExcelOne excel = new DmfAllExcelOne();
                BeanUtils.copyProperties(dmFprocessNodeReportModel, excel);
                listResult.add(excel);
            }
            WriteSheet writeSheet = EasyExcel.writerSheet(page - 1, "数据导出" + (page)).head(DmfAllExcelOne.class)
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            excelWriter.write(listResult, writeSheet);
            //}
           

            page = page + 1;

        }

    } catch (IOException e) {
        e.printStackTrace();
        log.error("导出失败[{}]", e.getMessage());
    } finally {
        excelWriter.finish();
    }


}

大家有不明白的可以留言,或者有更好的方法,可以直接联系我,本人十分感谢~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐