首页 > 其他分享 >树形结构导出excel表格

树形结构导出excel表格

时间:2024-07-04 17:27:05浏览次数:18  
标签:node headerRow 表格 spacing excel createCell 树形 setCellValue row

树形结构导出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;
    }

标签:node,headerRow,表格,spacing,excel,createCell,树形,setCellValue,row
From: https://blog.csdn.net/java_rutu/article/details/140184424

相关文章

  • 06-Excel初阶操作-学习笔记
    SUMIF和SUMIFS单(多)条件求和函数函数格式参数说明SUMTIF(参数1,参数2,参数3)参数1:区域参数2:符合条件参数3:求和区域SUMIFS(参数1,参数2,参数3,参数4,……)参数1:求和区域参数2:区域参数3:符合条件参数4:区域……基础应用SUMTIF(参数1,参数2,参数3)......
  • 钉钉应用开发-Python操作钉钉文档(excel版)
    钉钉应用开发-Python操作钉钉文档一:服务端SDK下载服务端SDK下载-钉钉开放平台(dingtalk.com)pip3installalibabacloud_dingtalk二:钉钉开放平台开发者后台(dingtalk.com)基础概念-钉钉开放平台(dingtalk.com)2.1:创建应用2.2:获取应用基本信息2.3:权限申请,获取......
  • 生成word文档,内容为表格(第一次实操)
    packagecom.cqbb.common.utils.poi;importcom.alibaba.fastjson2.JSONArray;importcom.alibaba.fastjson2.JSONObject;importcom.cqbb.common.config.BBKJConfig;importorg.apache.commons.io.IOUtils;importorg.apache.poi.openxml4j.exceptions.InvalidFormatExceptio......
  • 生成多个Sheet页的表格
    packagecom.cqbb.common.utils.poi;importorg.apache.poi.hssf.usermodel.*;importorg.apache.poi.ss.usermodel.HorizontalAlignment;importorg.apache.poi.ss.usermodel.VerticalAlignment;importorg.springframework.http.MediaType;importjavax.servlet.http.HttpSe......
  • 若依框架前端表格自适应
    1.背景问题描述:如图,若依前端表格高度都是固定写死的,因此会出现底部空一部分,现在希望自适应表格,使得表格一屏展示,且在隐藏查询条件等操作,导致屏幕大小变化时,表格可以同步自适应。 问题现状:很多时候,前端开发都是尽可能本机调整到刚刚好的高度,但不同用户不同电脑分辨率和浏览......
  • CF1039D You Are Given a Tree (树形 dp + 贪心 + 根号分治)
    CF1039DYouAreGivenaTree树形dp+贪心+根号分治题目是一个经典问题,可以用树形dp和贪心解决。设\(f_u\)表示以\(u\)节点为端点能够剩下的最长路径。考虑从叶子节点往上合并贪心,那么如果能够合并出包含\(u\)节点的大于等于\(k\)的路径,那么就合并,\(f_u=0\);否......
  • EXCEL中20个数据处理类函数公式应用实例
    在Excel中,数据处理类函数是进行数据分析和报告制作的重要工具。以下列举了另外20个数据处理类函数及其应用实例,这些函数涵盖了一系列高级的数据处理需求,包括统计分析、财务计算、工程计算以及更复杂的文本和日期时间操作。数据统计与分析STDEV.S函数:用于计算样本标准差。例......
  • excel基本操作
    1.设置保护/锁定工作表和工作薄设置保护表:打开excel--->打开审阅--->点击允许编辑区域  其他区域不能进行输入 设置保护工作薄:sheet1 sheet2就是工作薄2.填充柄:鼠标左键下拉 3.利用自定义列表填充  文件-》选项-》高级-》编辑自定义列表4.填充柄:鼠标右键下拉......
  • 像学Excel 一样学 Pandas系列-创建数据分析维度
    嗨,小伙伴们。又到喜闻乐见的Python数据分析王牌库Pandas的学习时间。按照数据分析处理过程,这次轮到了新增维度的部分了。老样子,我们先来回忆一下,一个完整数据分析的过程,包含哪些部分内容。其中,Pandas的基础信息导入、数据导入和数据整理、数据探索和清洗已经在前几篇文章......
  • 学习笔记485—Excel技巧:一键将文本数字转换为数值
    Excel技巧:一键将文本数字转换为数值在使用Excel进行数据处理时,经常会遇到数据格式不匹配的问题。特别是当从外部导入数据或手动输入数据时,数字可能会被误识别为文本格式,这在进行数据计算和分析时会带来诸多不便。幸运的是,Excel提供了一些便捷的方法,可以帮助我们一键将文本转换为......