poi实现数据导出行合并,列宽设置等

原来的导出
在这里插入图片描述

合并后
在这里插入图片描述

/**
     * 归集导出
     */
    @Override
    public void selectIsTheCollection(HttpServletRequest request, HttpServletResponse response, String type) {
        ArrayList<ResInfoVo> list = new ArrayList<>();
        List<RdResourceDir> rdResourceDirs = rdResourceDirMapper.selectList(Wrappers.<RdResourceDir>lambdaQuery().eq(RdResourceDir::getCollectionSituation, type).orderByDesc(RdResourceDir::getResSourceDept));
        List<String> deptList = rdResourceDirMapper.selectResSourceDeptList(type);
        HashMap<String, Integer> map = new HashMap<>();
        for (String s : deptList) {
            map.put(s, 0);
        }

        for (RdResourceDir rdResourceDir : rdResourceDirs) {
            ResInfoVo resInfoVo = CopyUtil.clone(rdResourceDir, ResInfoVo.class);
            resInfoVo.setDir(rdResourceDir);

            RdResDetailsApi api = rdResDetailsApiService.getOne(Wrappers.<RdResDetailsApi>lambdaQuery().eq(RdResDetailsApi::getResDirId, rdResourceDir.getId()));
            if (null != api) {
                List<RdParameterInformation> params = paramMapper.selectList(Wrappers.<RdParameterInformation>lambdaQuery().eq(RdParameterInformation::getOwnResId, api.getId()));
                api.setRequestParamInfo(params.stream().filter(param -> null != param && param.getParameterType() == 0).collect(Collectors.toList()));
                api.setReturnParamInfo(params.stream().filter(param -> null != param && param.getParameterType() == 1).collect(Collectors.toList()));
            }
            resInfoVo.setDetailsApi(api);
            list.add(resInfoVo);
        }

        SXSSFWorkbook workbook = new SXSSFWorkbook(2000);
        String sheetName = "已归集接口信息";
        SXSSFSheet sheet = workbook.createSheet(sheetName);
        SXSSFRow row0 = sheet.createRow(0);
        row0.createCell(0).setCellValue("数源单位");
        row0.createCell(1).setCellValue("接口名称");
        row0.createCell(2).setCellValue("字段数");
        row0.createCell(3).setCellValue("入参信息");
        row0.createCell(4).setCellValue("入参说明");
        row0.createCell(5).setCellValue("出参信息");
        row0.createCell(6).setCellValue("出参说明");
        row0.createCell(7).setCellValue("共享方式");
        int rowSizeTotal = 0;

        for (int i = 0; i < list.size(); i++) {
            RdResDetailsApi detailsApi = list.get(i).getDetailsApi();
            int size = 0;
            if (detailsApi != null) {
                List<RdParameterInformation> requestParamInfo = detailsApi.getRequestParamInfo();
                List<RdParameterInformation> returnParamInfo = detailsApi.getReturnParamInfo();
                int requestSize = requestParamInfo.size();
                int returnSize = returnParamInfo.size();

                if (requestSize > returnSize) {
                    size = requestSize;
                    int w = 0;
                    for (int j = 0; j < requestParamInfo.size(); j++) {

                        rowSizeTotal = rowSizeTotal + 1;
                        SXSSFRow row = sheet.createRow(rowSizeTotal);
                        row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
                        row.createCell(1).setCellValue(list.get(i).getDir().getResName());
                        row.createCell(2).setCellValue(requestParamInfo.size() + returnParamInfo.size());
                        row.createCell(3).setCellValue(requestParamInfo.get(j).getParameterName());
                        row.createCell(4).setCellValue(requestParamInfo.get(j).getExplains());
                        row.createCell(7).setCellValue("接口共享");
                        if (w < returnSize - 1) {
                            row.createCell(5).setCellValue(returnParamInfo.get(j).getParameterName());
                            row.createCell(6).setCellValue(returnParamInfo.get(j).getExplains());
                            w++;
                        }

                    }

                }

                if (!(requestSize > returnSize)) {
                    size = returnSize;
                    int w = 0;
                    for (int j = 0; j < returnParamInfo.size(); j++) {

                        rowSizeTotal = rowSizeTotal + 1;
                        SXSSFRow row = sheet.createRow(rowSizeTotal);
                        row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
                        row.createCell(1).setCellValue(list.get(i).getDir().getResName());
                        row.createCell(2).setCellValue(requestParamInfo.size() + returnParamInfo.size());
                        row.createCell(5).setCellValue(returnParamInfo.get(j).getParameterName());
                        row.createCell(6).setCellValue(returnParamInfo.get(j).getExplains());
                        row.createCell(7).setCellValue("接口共享");
                        if (w < requestSize - 1) {
                            row.createCell(3).setCellValue(requestParamInfo.get(w).getParameterName());
                            row.createCell(4).setCellValue(requestParamInfo.get(w).getExplains());
                            w++;
                        }

                    }

                }


            } else {
                size = 1;
                rowSizeTotal = rowSizeTotal + 1;
                SXSSFRow row = sheet.createRow(rowSizeTotal);
                row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
                row.createCell(1).setCellValue(list.get(i).getDir().getResName());
                row.createCell(7).setCellValue("接口共享");
            }

            if (size > 1) {
                // 合并日期占两行(4个参数,分别为起始行,结束行,起始列,结束列)   1-5  6-11
                // 行和列都是从0开始计数,且起始结束都会合并                        5  6  7
                // 这里是合并excel中日期的两行为一行
                CellRangeAddress regionName = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 1, 1);
                sheet.addMergedRegion(regionName);

                CellRangeAddress regionNum = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 2, 2);
                sheet.addMergedRegion(regionNum);

                CellRangeAddress region = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 7, 7);
                sheet.addMergedRegion(region);
            }

            String resSourceDept = list.get(i).getDir().getResSourceDept();
            Integer integer = map.get(resSourceDept);
            map.put(resSourceDept, integer + size);
        }
        int y = 0;
        for (String s : deptList) {
            Integer integer = map.get(s);
            y = y + integer;
            if (integer > 1) {
                CellRangeAddress region = new CellRangeAddress((y - integer + 1), y, 0, 0);
                sheet.addMergedRegion(region);
            }
        }
        sheet.setColumnWidth(0, 5000);
        sheet.setColumnWidth(1, 5000);
        sheet.setColumnWidth(2, 2000);
        sheet.setColumnWidth(3, 5000);
        sheet.setColumnWidth(4, 5000);
        sheet.setColumnWidth(5, 4000);
        sheet.setColumnWidth(6, 4000);
        sheet.setColumnWidth(7, 3000);

        fileOutputStream(request, response, workbook, sheetName);

    }
private void fileOutputStream(HttpServletRequest request, HttpServletResponse response, SXSSFWorkbook workbook, String fileName) {
        OutputStream output;
        try {
            output = response.getOutputStream();
            String agent = request.getHeader("USER-AGENT").toLowerCase();
            response.setContentType("application/octet-stream");
            //response.setContentType("application/force-download");
            // response.setContentType("application/vnd.ms-excel");
            String codedFileName = URLEncoder.encode(fileName, "UTF-8");
            if (agent.contains("firefox")) {
                response.setCharacterEncoding("utf-8");
                response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), StandardCharsets.ISO_8859_1) + ".xls");
            } else {
                response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
            }
            workbook.write(output);
            output.close();
        } catch (IOException e) {
            log.error("数据导出出错:{}", e.getMessage());
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值