树形结构导出excel表格

树形结构导出excel表格

在这里插入图片描述
原本是想做成这样
在这里插入图片描述
但是没学会,最后做成这样
在这里插入图片描述

直接看代码

public String excelDowmload(DormCheckStatParamDto param)  {
        String resultUrl = null;
        param.setSearchAll(SEARCH_ALL_NO);
        try {
            DormCheckResultDto dormCheckResultDto = CheckRecordTime(param);//这里就是要导出的结构集,我这里的结果集是个树形结构
            resultUrl = exportTreeStructureWithDataToExcel(dormCheckResultDto);
            System.out.println("文件已上传,访问链接: " + resultUrl);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DataException de) {
            LOG.info("打印日志:{}",JSON.toJSONString(de));
        }
        return resultUrl;
    }
public  String exportTreeStructureWithDataToExcel(DormCheckResultDto root) throws IOException {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("宿舍检查结果树形结构");
        // 写入表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("部门名称");
        headerRow.createCell(1).setCellValue("类型");
        headerRow.createCell(2).setCellValue("在寝人数");
        headerRow.createCell(3).setCellValue("晚归人数");
        headerRow.createCell(4).setCellValue("请假外宿人数");
        headerRow.createCell(5).setCellValue("缺寝人数");
        headerRow.createCell(6).setCellValue("未查寝人数");
        headerRow.createCell(7).setCellValue("离寝人数");
        headerRow.createCell(8).setCellValue("滞留人数");
        headerRow.createCell(9).setCellValue("请假在寝人数");
        exportNodeWithData(sheet, root, 1,0); // 开始导出,根节点从第二行开始,第一行为表头
        try {
            String uuid = CoreUtils.getUUID();
            File tmpFile = File.createTempFile(uuid, ".xlsx");

            try (OutputStream outputStream = new FileOutputStream(tmpFile)) {
                workbook.write(outputStream);
                outputStream.flush();
            }
            try (FileInputStream inputStream = new FileInputStream(tmpFile)) {
                long fileSize = tmpFile.length();
                //这里我是需要上传到公司服务器,也可以做成到客户端下载
                String resultUrl = fileClient.put(inputStream, uuid + ".xlsx", fileSize, "dorm", null, null);
                if (CoreUtils.isNull(resultUrl)) {
                    throw new DataException("上传文件有误");
                }
                return resultUrl; // 返回上传后的文件URL
            }
        } finally {
            workbook.close(); // 确保工作簿资源被释放
        }
    }
private static int recursionCount =1;//这里定义一个全局变量是为了定位数据导出到excel的行数,这是最简单的方法,也可以通过在递归中返回rowIndex定位行数
    private  void exportNodeWithData(Sheet sheet, DormCheckResultDto node, int rowIndex,int spacing) {
        recursionCount++;
        Row row = sheet.createRow(rowIndex);
        Cell cell = row.createCell(0);
        cell.setCellValue(node.getDeptName());
        cell.setCellStyle(createCellStyle(sheet.getWorkbook(), spacing)); // 根据需要调整缩进
        //这里根据缩进增加了一个类型
        if (spacing == 0) {
            row.createCell(1).setCellValue("校区");
        }else if (spacing == 1) {
            row.createCell(1).setCellValue("院系");
        }else if (spacing == 2) {
            row.createCell(1).setCellValue("专业");
        }else if (spacing == 3) {
            row.createCell(1).setCellValue("班级");
        }
        //这里记得做判断
        row.createCell(2).setCellValue(node.getDormCheckResultIn());
        row.createCell(3).setCellValue(node.getDormCheckResultLate());
        row.createCell(4).setCellValue(node.getDormCheckResultApplyLeave());
        row.createCell(5).setCellValue(node.getDormCheckResultAbsent());
        row.createCell(6).setCellValue(node.getDormCheckResultInit());
        row.createCell(7).setCellValue(node.getDormCheckResultLeft());
        row.createCell(8).setCellValue(node.getDormCheckResultStay());
        row.createCell(9).setCellValue(node.getDormCheckResultApplyStay());
        // 递归处理子节点
        if (node.getDormCheckResultInDtos() != null) {
            spacing++;
            for (int i = 0; i < node.getDormCheckResultInDtos().size(); i++) {
                exportNodeWithData(sheet, node.getDormCheckResultInDtos().get(i), recursionCount,spacing); // 调整下一行的索引
            }
        }
    }
private  CellStyle createCellStyle(Workbook workbook, int indentLevel) {
        CellStyle style = workbook.createCellStyle();
        style.setIndention((short) (indentLevel * 4)); // 设置缩进,自己选择长度
        return style;
    }

编号 文件名称 cwts-specs-001 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:名语术语 cwts-specs-002 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:概述 cwts-specs-003 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理信道和传输信道到物理信道的映射 cwts-specs-004 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:信道编码与复用 cwts-specs-005 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:扩频与调制 cwts-specs-006 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理层过程 cwts-specs-007 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理层测量 cwts-specs-008 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:物理层向上层提供的服务 cwts-specs-009 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:MAC协议 cwts-specs-010 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:RLC协议 cwts-specs-011 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:PDCP协议 cwts-specs-012 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:BMC协议 cwts-specs-013 IMT-DS FDD(WCDMA)系统无线接口层3技术规范:RRC协议 cwts-specs-014 IMT-DS FDD(WCDMA)系统Iu接口技术规范:概述 cwts-specs-015 IMT-DS FDD(WCDMA)系统Iu接口技术规范:层1技术要求 cwts-specs-016 IMT-DS FDD(WCDMA)系统Iu接口技术规范:信令传输 cwts-specs-017 IMT-DS FDD(WCDMA)系统Iu接口技术规范:RANAP信令 cwts-specs-018 IMT-DS FDD(WCDMA)系统Iu接口技术规范:数据传输和传输信令 cwts-specs-019 IMT-DS FDD(WCDMA)系统Iu接口技术规范:用户平面协议 cwts-specs-020 IMT-DS FDD(WCDMA)系统Iub接口技术规范:概述 cwts-specs-021 IMT-DS FDD(WCDMA)系统Iub接口技术规范:层1技术要求 cwts-specs-022 IMT-DS FDD(WCDMA)系统Iub接口技术规范:信令传输 cwts-specs-023 IMT-DS FDD(WCDMA)系统Iub接口技术规范:NBAP信令 cwts-specs-024 IMT-DS FDD(WCDMA)系统Iub接口技术规范:用于CCH数据流的数据传输和传输信令 cwts-specs-025 IMT-DS FDD(WCDMA)系统Iub接口技术规范:用于CCH数据流的用户平面协议 cwts-specs-026 IMT-DS FDD(WCDMA)系统Iur接口技术规范:概述 cwts-specs-027 IMT-DS FDD(WCDMA)系统Iur接口技术规范:层1技术要求 cwts-specs-028 IMT-DS FDD(WCDMA)系统Iur接口技术规范:信令传输 cwts-specs-029 IMT-DS FDD(WCDMA)系统Iur接口技术规范:RNSAP信令 cwts-specs-030 IMT-DS FDD(WCDMA)系统Iur接口技术规范:用于CCH数据流的数据传输和传输信令 cwts-specs-031 IMT-DS FDD(WCDMA)系统Iur接口技术规范:用于CCH数据流的用户平面协议 cwts-specs-032 IMT-DS FDD(WCDMA)系统Iub/Iur接口技术规范:用于DCH数据流的数据传输和传输信令 cwts-specs-033 IMT-DS FDD(WCDMA)系统Iub/Iur接口技术规范:用于DCH数据流的用户平面协议 cwts-specs-034 TD-SCDMA系统无线接口物理层技术规范 cwts-specs-035 TD-SCDMA系统无线接口层2技术规范 cwts-specs-036 TD-SCDMA系统无线接口层3-RRC技术规范 cwts-specs-037 TD-SCDMA系统Iu接口技术规范 cwts-specs-038 TD-SCDMA系统Iub接口技术规范 cwts-specs-039 TD-SCDMA系统Iur接口技术规范 cwts-specs-040 TD-SCDMA系统基站设备无线收发特性技术规范 cwts-specs-041 TD-SCDMA系统用户终端设备无线收发特性技术规范 CWTS发布的研究报告列表 cwts-reports-001 IMT-DS FDD(WCDMA)系统连接模式下的层间过程(25.303)标准研究报告 cwts-reports-002 IMT-DS FDD(WCDMA)系统空闲模式下UE的流程和连接模式下小区重选流程(25.304)标准研究报告 cwts-reports-003 IMT-DS FDD(WCDMA)系统无线资源管理RRM研究报告 cwts-reports-004 IMT-DS FDD(WCDMA)系统无线资源管理RRM研究报告 cwts-reports-005 IMT-DS FDD(WCDMA)系统UE无线接入能力研究报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值