java后端Excel表格导出 poi

java后端Excel表格导出

该篇的导出没有什么复杂的点,值得注意的一点是,一张Sheet页最多大概是65000条数据,当导出数据较多时,要自动切换sheet页,该代码写了此功能,注意查看.现在也有叫Csv的导出,就不用考虑数据溢出问题.可以查看其它博主的博客

	//Controller 注意是Post请求,Get请求走不通
    @ApiOperation(value = "代理销售额以及信息导出", notes = "代理销售额以及信息导出")
    @PostMapping("downLoadAgentAllInfo")
    public void downLoadAgentAllInfo(HttpServletResponse response, @RequestBody MemberSearchDTO memberSearchDTO) {
        umsMemberService.downLoadAgentAllInfo(response, memberSearchDTO);
    }
//Service
void downLoadAgentAllInfo(HttpServletResponse response, MemberSearchDTO memberSearchDTO);
//ServiceImpl
@Override
    public void downLoadAgentAllInfo(HttpServletResponse response, MemberSearchDTO memberSearchDTO) {
        Date beginTime = memberSearchDTO.getBeginTime();
        Date endTime = memberSearchDTO.getEndTime();
        Map map = new HashMap();
        if(beginTime != null){
            map.put("beginTime",beginTime);
        }
        if(endTime != null){
            map.put("endTime",endTime);
        }
        List<UmsAgentAllInfoDO> list  = new ArrayList<>();
        list = umsMemberMapper.selectAllData(map);


        if(list != null && list.size() > 0){

        }
        HSSFWorkbook wk = new HSSFWorkbook();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //每个sheet页导出的数据行数 60000
        int sheetRow = 65000;
        //一共几个sheet页
        int sheetNum = list.size() / sheetRow;
        for (int i = 0; i < sheetNum + 1; i++) {

            // 创建一张工作表
            HSSFSheet sheet2 = wk.createSheet("代理信息" + (i + 1));
            sheet2.setColumnWidth(0, 5000);
            HSSFRow row2 = sheet2.createRow(0);
            String[] head = new String[]{
                    "昵称", "用户id", "工号", "等级", "推荐人id", "推荐人工号", "推荐人等级", "新增Q数", "新增P数", "自己购买订单数","自己购买销量小计","双费合一自己下单数","横向下单数","纵向下单数","销量小计","订单数小计"
            };
            int headInt = 0;
            //创建表格头
            for (String title : head) {
                row2.createCell(headInt++).setCellValue(title);
            }
            int num = i * sheetRow;
            int index = 0;
            int rowInt = 1;
            for (int m = num; m < list.size(); m++) {
                if (index == sheetRow) {
                    break;
                }
                UmsAgentAllInfoDO umsAgentAllInfoDO = list.get(m);
                //塞值
                row2 = sheet2.createRow(rowInt++);
                row2.createCell(0).setCellValue(umsAgentAllInfoDO.getWxName());
                row2.createCell(1).setCellValue(umsAgentAllInfoDO.getMemberId() == null ?"":umsAgentAllInfoDO.getMemberId().toString());
                row2.createCell(2).setCellValue(umsAgentAllInfoDO.getCode());
                row2.createCell(3).setCellValue(umsAgentAllInfoDO.getLevel() == null?"":umsAgentAllInfoDO.getLevel().toString());
                row2.createCell(4).setCellValue(umsAgentAllInfoDO.getRefereeId() == null ?"":umsAgentAllInfoDO.getRefereeId().toString());
                row2.createCell(5).setCellValue(umsAgentAllInfoDO.getRefereeCode());
                row2.createCell(6).setCellValue(umsAgentAllInfoDO.getRefereeLevel() == null ?"":umsAgentAllInfoDO.getRefereeLevel().toString());
                row2.createCell(7).setCellValue(umsAgentAllInfoDO.getNumQ() == null?"":umsAgentAllInfoDO.getNumQ().toString() );
                row2.createCell(8).setCellValue(umsAgentAllInfoDO.getNumP() == null ?"":umsAgentAllInfoDO.getNumP().toString());
                row2.createCell(9).setCellValue(umsAgentAllInfoDO.getOrderNum() == null ?"":umsAgentAllInfoDO.getOrderNum().toString());
                row2.createCell(10).setCellValue(umsAgentAllInfoDO.getTotalPrice() == null ?"":umsAgentAllInfoDO.getTotalPrice().toString());
                row2.createCell(11).setCellValue(umsAgentAllInfoDO.getShuangfeiOrderNum() == null ?"":umsAgentAllInfoDO.getShuangfeiOrderNum().toString());
                row2.createCell(12).setCellValue(umsAgentAllInfoDO.getShuangfeiHengOrderNum() == null ?"":umsAgentAllInfoDO.getShuangfeiHengOrderNum().toString());
                row2.createCell(13).setCellValue(umsAgentAllInfoDO.getShuangfeiZongOrderNum() == null ?"":umsAgentAllInfoDO.getShuangfeiZongOrderNum().toString());
                row2.createCell(14).setCellValue(umsAgentAllInfoDO.getShuangfeiTotalPrice() == null ?"":umsAgentAllInfoDO.getShuangfeiTotalPrice().toString());
                row2.createCell(15).setCellValue(umsAgentAllInfoDO.getShuangfeiOrderTotalNum() == null ?"":umsAgentAllInfoDO.getShuangfeiOrderTotalNum().toString());
                index++;
            }
        }

        try {
            /**
             * 弹出下载选择路径框
             */
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment;filename=Opinion.xls");//默认Excel名称
            wk.write(response.getOutputStream());
            response.flushBuffer();
            logger.info("downLoadAgentAllInfo----->downLoadAgentAllInfo:导出成功");
        } catch (IOException e) {
            logger.error("downLoadAgentAllInfo----->downLoadAgentAllInfo:导出Execl异常");
            e.printStackTrace();
        } finally {
            try {
                wk.close();
            } catch (IOException e) {
                logger.error("downLoadAgentAllInfo----->downLoadAgentAllInfo:导出Execl,Io流关闭异常");
                e.printStackTrace();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值