树形结构导出excel表格

poi实现对树形结构数据导出excel并合并表格 poi实现对树形结构数据导出excel并合并表格 最近好像得罪了poi,遇到的都是导出word、Excel、pdf的问题。下面我记录一下poi对树形结构的处理,前面先梳理整体思路,文章末尾会贴上完整代码。 首先我们看一下模板和效果图吧: 怎么样,效果还行吧,有没有达到你心目中的标准?如果你也遇到了这样的问题,那么请静下心来花费几分钟时间,我会详细的梳理出自己的思路,希望能够帮助到你。 现在开始... 阅读详情

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

Python实战:如何用readmdict库提取MDX词典数据并生成Excel表格(附完整代码) 本文详细介绍了使用Python的readmdict库解析MDX词典文件,并将其中的结构化数据提取并导出为Excel表格的完整实战流程。内容涵盖环境搭建、核心数据解析、树形结构处理以及高效输出,为语言学习者和数据工程师提供了一套可复用的自动化解决方案。 阅读详情

相关推荐

JAVA导出EXCEL实现

JAVA导出EXCEL实现

yjclsx的博客 45万+

将树状数据结构生成并导出Excel处理

将树状数据导出到excel中,并自动合并单元格(数据传递采用了hutool中Tree对象,方便直接使用)

channlang的博客 2996

tree-excel:解析树结构并导出 excel

树结构 EXCEL 导出 解析树结构并导出 excel 自动计算并合并单元格 树结构保留 API简洁 高度内聚 依赖 FileSaver.js exceljs 数据格式要求 [ { value: "value 1", list: [ { value: "value 2" }, ] } ] 示例 // 数据 const header = ['日期','人员','订单号','菜品','价格']; const data = [ { value: "2021-05-06", list: [ { value: "不才", list: [ { value: "O891JHU876HGT", list:

Java 树形结构数据生成导出excel文件

Java树形结构数据生成导出excel文件。

早晨阳光一般暖的博客 7430

TreeView导出excel完整示例

TreeView导出excel完整示例 项目添加 Microsoft.Office.Interop.Excel; 嵌入互操作类型改为False,

Java实现生成Excel树形表头完整代码示例

主要介绍了Java实现生成Excel树形表头完整代码示例,具有一定借鉴价值,需要的朋友可以参考下。

java代码将树形数据输出为excel表格(可以渲染无限级)

用最简单描述,帮助大家最快速的上手!!!

个人日常记录,分析 5507

DMA 定制固件教程:小白跟做即得单人固件,超详细纯喂饭教程,100% 成功秘籍!FPGA仿真1:1、中断逻辑和TLP核心都在。

DMA 定制固件教程 小白跟着操作做可以做出的单人固件。DMA仿真技术io、中断逻辑,从零仿真。图文链接教程:https://docs.qq.com/doc/DQ01lVGtHelROVHNv

qq_15741349的博客 3万+

使用easyExcel导出树结构数据的excel

最近接到项目需求,需要把系统里维护的分类标准要以树的形式导出excel。以下记录实现的代码,与君共勉,欢迎指正。(菜鸟一枚,大神轻喷。1. 依赖// Step.1 组装查询条件查询数据// Step.2 将列表信息转换成树结构信息// Step.3 生成excel 并下载// Step.4 给前台// 设置响应@Data@Component。

qq_36912762的博客 3035

fastadmin云快充充电桩系统部署文档uniapp

多商户 嘎嘎快充V1.0部署文档 一、服务器环境: 服务器配置4核心8GB内存5M带宽以上配置 VX next1402 只支持linux环境 nginx1.22 php7.2 开启redis、fileinfo扩展,关闭禁用workerman gatewayworkerman需要的函数,如pcntl相关的函数 mysql5.7 supervisor redis 注意: 1.站点必须配置https、websocket配置wss 2.注意开放直连服务端口:2024,并添加到安全组 二、必

itholiday2014的博客 1632

避免踩坑!WIN11 22H2更新后共享打印机失效的终极解决方案

本文详细解析了WIN11 22H2更新后共享打印机失效的问题,特别是常见的0x00000709错误代码。通过系统更新机制分析、错误代码解读,提供从基础到高级的完整解决方案,包括注册表修复、组策略调整和驱动兼容性处理,帮助用户彻底解决打印机共享问题并预防未来故障。

pp12345的博客 536

树形结构导出excel表格,父级节点跨行

效果图 mavan依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache

qq_44819536的博客 1355

告别老旧内核!手把手教你为Android 10设备手动更新WebView(以升级至97版为例)

本文详细指导如何在Android 10设备上手动更新WebView至97版,解决老旧内核导致的兼容性、性能和安全问题。通过ADB命令和图形化操作两种方案,无需Root即可完成升级,显著提升网页加载速度和安全性。

weixin_28672681的博客 583

将树形结构转换行,后续可导出Excel

[浦东新区, 唐镇, 玉兰一],[浦东新区, 唐镇, 玉兰二],[浦东新区, 张江, ],[徐汇区, 华泾镇, ]]

weixin_35801407的博客 340

深入浅出:UE4类型系统完整构建过程详解

UE4的类型系统是一个复杂但设计精巧的架构,它通过静态代码生成和运行时构建的完美配合,实现了强大的反射功能。理解这个过程不仅有助于解决开发中的问题,也能让你更好地利用UE4的各种高级特性。就像建造一栋大楼需要经过设计、备料、框架、装修、验收等多个阶段,UE4类型系统的构建也是一个多阶段、精细化的过程。每个阶段都有其特定的职责,共同协作完成从源代码到运行时对象的转换。

m0_45371381的博客 911

Scipy优化踩坑实录:trust-constr和SLSQP约束定义到底差在哪?

本文深入解析了Scipy优化模块中trust-constr和SLSQP两种方法在约束定义上的差异。通过对比面向对象的trust-constr和字典式定义的SLSQP,揭示了它们各自的优势与适用场景,帮助开发者在有约束优化问题中选择合适的算法,提升计算效率与准确性。

weixin_42573113的博客 271

javaScript实现 树形JSON格式数据 导出 Excel表格

javaScript实现 树形JSON格式数据 导出 Excel表格

Li_bihua的博客 1344

基于DFT的mbist sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 924

导出树形结构,excel

【代码】导出树形结构,excel。

jah 269

【FPGA教程案例87】加解密1——基于FPGA的AES加解密算法verilog实现

DES已走到了它生命的尽头。56比特密钥实在太小,虽然三重DES可以解决密钥长度的问题,但是DES的设计主要针对硬件实现,而今在许多领域,需要用软件方法来实现它,在这种情况下,它的效率相对较低。1997年4月15日美国国家标准和技术研究所(NIST)发起征集AES(Advanced Encryption Standard)算法的活动,并成立了AES工作组。目的是为了确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护下一世纪政府的敏感信息。这里,我们对AES的基本原理进行介绍:

FPGA/MATLAB学习教程/源码/项目合作开发 2546

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

前端导出Excel实践指南

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取。

2401_84092542的博客 423

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从需求到实践:深入浅出 vxe-table 表格组件使用指南

vxe-table 是一个基于 Vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、自定义模板等强大功能。<template><vxe-column field="name" title="姓名"></vxe-column><vxe-column field="tags" title="标签"><el-select v-model="row.tags" multiple placeholder="请选择标签">

wwwlll2的博客 1531

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

FormCreate 设计器 v6.2 正式发布:全新数据表格上线,Excel 与事件能力全面升级!

FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。

轻松搞定低代码 445

推荐一款简单易懂的VUE导出Tbale导出excel表格插件[ Table-excel ]

1、插件地址 将前端 table 导出 excel , 基于 exceljs + file-saver , 适用于所有表格 基于 数据源的定制化导出 具大佬所说,是公司给俩星期开发时间开发出来的导出插件,在我使用vxe-table插件自带的导出功能时,那个导出是分组表头的问题确实影响了我很久~所幸有这么款简单易上手的插件,解决了我大部分的问题,也节省了很多时间。大家有兴趣可以去git上瞅瞅,如果有帮到的可以点个⭐啥的,有啥优化意见可以在上面提,大佬有时间的话回复的也蛮快。 2.简单操作实现前端导出,在也

weixin_44400823的博客 4418

PC左树右表的简单结构

【代码】PC左树右表的简单结构。

weixin_59527403的博客 592

java树型结构的学习

java递归 递归导出数据 /** * 导出 * * @param request */ @Override public List<List<?>> getExportData(FsEconomyCategoryRequest request) { //所有数据集合 List<List<?>> exportData = new ArrayList<>();

weixin_45751866的博客 174
上一篇: JSON parse error: Cannot deserialize value of type java.util.ArrayList<SalarySecurityDto> f解决方法
下一篇: 解决GROUP_CONCAT结果长度被限制问题
不早睡不改名@
博客等级 码龄5年 536粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值