easyExcel 多sheet导出

4 篇文章 0 订阅
仅供参考。注意点1是多sheet导出时,sheetNo 和 sheetName 要根据页数变更。如果sheetName一样,会导出在一个sheet中,另外我是自定义head,不是用对象去定义的。这样更灵活些。
@Override
public void exprot(HttpServletResponse response,List<Long> ids) {

    List<SupplyPlanHeadDTO> exportData = new ArrayList<>();
    List<List<String>> head = new ArrayList<>();
    ;
    List<List<String>> body = new ArrayList<>();
    ;
    List<String> productBarCode = Lists.newArrayList();
    List<String> productName = Lists.newArrayList();
    List<String> regionWarehouseName = Lists.newArrayList();
    productBarCode.add("xxx");
    productName.add("xxx");
    regionWarehouseName.add("xxx");
    ExcelWriter excelWriter = null;
    try {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        fileName = URLEncoder.encode("导出报表" + DateUtil.getDateTime(), "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        excelWriter = EasyExcel.write(response.getOutputStream()).build();
        for (int i = 0; i < ids.size(); i++) {
            head.clear();
            body.clear();
            head.add(productBarCode);
            head.add(productName);
            head.add(regionWarehouseName);
            Long id = ids.get(i);
            SupplyPlanHeadDTO byId = getById(id);
            SupplyPlanDetailQuery supplyPlanDetailQuery = new SupplyPlanDetailQuery();
            supplyPlanDetailQuery.setSupplyPlanHeadId(id);
            List<SupplyPlanDetailDTO> supplyPlanDetailDTOS = supplyPlanDetailManager.queryByHeadId(id);
            byId.setDetailDTOList(supplyPlanDetailDTOS);
            exportData.add(byId);

            if (EmptyUtil.isNotEmpty(exportData)) {
                List<SupplyPlanDetailDTO> detailDTOList = exportData.get(0).getDetailDTOList();
                if (EmptyUtil.isNotEmpty(detailDTOList)) {
                    detailDTOList.stream().forEach(x -> {
                        String timeStr = DateUtil.format(x.getStartDate(), "yyyy.MM.dd") + "_" + DateUtil.format(x.getEndDate(), "yyyy.MM.dd");
                        List<String> time = Lists.newArrayList();
                        time.add(timeStr);
                        head.add(time);
                    });
                }
                for (SupplyPlanHeadDTO x : exportData) {
                    List<String> bodyItem = Lists.newArrayList();
                    bodyItem.add(x.getProductBarCode());
                    bodyItem.add(x.getProductName());
                    bodyItem.add(x.getDetailDTOList().get(0).getRegionName());
                    if (EmptyUtil.isNotEmpty(x.getDetailDTOList())) {
                        for (SupplyPlanDetailDTO y : x.getDetailDTOList()) {
                            bodyItem.add(y.getDemandNum() == null ? "0.000" : y.getDemandNum().toString());
                        }
                    }
                    body.add(bodyItem);
                }
                //获取sheet对象
                WriteSheet mainSheet = EasyExcel.writerSheet(i, byId.getDemandCycle()).head(head).build();
                //向sheet写入数据
                excelWriter.write(body, mainSheet);
            }
        }
    } catch (Exception e) {
        log.error("SupplyPlanHeadServiceImpl.exprot error:{}",e.getMessage(),e);
    } finally {
        if (excelWriter != null) {
            excelWriter.finish();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值