当前位置: 首页 > news >正文

EasyExcel动态拆分非固定列Excel表格

使用EasyExcel动态拆分非固定列Excel表格

在Excel数据解析场景中,​动态列结构拆分是典型挑战(如供应链系统中不同品类的属性字段差异较大)。传统基于POJO映射的方案无法应对列数量不固定的场景。本方案采用EasyExcel的动态模型解析和Map数据承载技术,实现按指定列(如"部门")拆分时自动保留原始列结构,支持以下特性:

  • 无需预定义Java实体类
  • 自动继承原始表格所有列头
  • 拆分后文件保留完整数据格式

无实体动态读取表格

继承 AnalysisEventListener 创建一个自定义监听器,用于处理 Excel 文件的解析和数据拆分。在监听器中,可以重写 invokeHeadMap 方法来获取表头信息,重写 invoke 方法来处理每一行数据。

@Data
public class CustomExcelListener extends AnalysisEventListener<Map<Integer, String>> {private Map<Integer, String> headerMap; // 表头信息private final Map<String, List<Map<String, String>>> dataMap = new LinkedHashMap<>(); // 拆分后的数据,此处使用LinkedHashMap保持插入顺序private int specifiedColumnIndex = 0;指定某一列拆分表格,可使用列索引/列名@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {this.headerMap = headMap;// 根据表头初始化 dataMapfor (Map.Entry<Integer, String> entry : headMap.entrySet()) {dataMap.put(entry, new ArrayList<>());}}@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {// 获取指定列的值String specifiedColumnValue = data.get(specifiedColumnIndex);// 如果指定列的值为空,设置一个默认值if (specifiedColumnValue == null) {specifiedColumnValue = "默认分类";}// 将整行数据存储到对应的分类中dataMap.computeIfAbsent(specifiedColumnValue, k -> new ArrayList<>()).add(new HashMap<>(data));}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 可进行数据校验或数据处理// 对于拆分后的数据处理可以在doAfterAllAnalysed()中,也可以通过listener.getDataMap()获取数据后自行处理。}
}

解析 Excel 文件

在解析 Excel 文件时,使用 EasyExcel 的 read 方法,并将自定义的监听器传递进去。

File targetFile = new File("/yourFile/file.xls"); // 读取的文件
int specifiedColumnIndex = 0:// 可传入指定列索引,用以拆分excel表格
CustomExcelListener listener = new CustomExcelListener("可传入指定列索引,用以拆分excel表格");
ExcelReader excelReader = EasyExcel.read(targetFile).sheet(0).registerReadListener(listener ).doRead();
listener.getDataMap();// 可获取拆分后的表数据

通过 specifiedColumnIndex 变量来指定用于拆分表格的列索引。在实际应用中,这个索引值可能需要根据具体情况动态确定。

总结

通过上述方案,可高效应对供应链、电商等场景中非固定列结构的Excel拆分需求,具体性能优化需自行添加。实际应用中建议结合具体业务场景选择拆分策略(如按时间/地区等多列组合拆分)。

相关文章:

EasyExcel动态拆分非固定列Excel表格

使用EasyExcel动态拆分非固定列Excel表格 在Excel数据解析场景中&#xff0c;​动态列结构拆分是典型挑战&#xff08;如供应链系统中不同品类的属性字段差异较大&#xff09;。传统基于POJO映射的方案无法应对列数量不固定的场景。本方案采用EasyExcel的动态模型解析和Map数据…...

开源WAF雷池本地化部署与远程查看网站安全防护的详细操作指南

文章目录 前言1.关于SafeLine2.安装Docker3.本地部署SafeLine4.使用SafeLine5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 各位建站小能手们&#xff0c;无论是想搭建个人博客、企业官网还是各种应用平台来推广自己的内容或产品&#xff0c…...

由一个话题进入DFMEA(设计失效模式及影响分析)

前言 最近看到了知乎的一个话题“为啥撞车后总是看到雨刮器在摆动&#xff1f;”&#xff0c;联想到产品设计中的一些功能安全设计&#xff0c;也借此机会学习DFMEA&#xff0c;讨论一下我个人对于DFMEA的理解。 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 128…...

Redisson 实现分布式锁源码浅析

大家好&#xff0c;我是此林。 今天来分享Redisson分布式锁源码。还是一样&#xff0c;我们用 问题驱动 的方式展开讲述。 1. redis 中如何使用 lua 脚本&#xff1f; Redis内置了lua解释器&#xff0c;lua脚本有两个好处&#xff1a; 1. 减少多次Redis命令的网络传输开销。…...

机试准备第17天

今天进入图论的学习。图论只考察初试学过的算法&#xff0c;一般都是模版题。常见考点有图相关的数据结构——邻接表法&#xff0c;图的遍历 BFS DFS 并查集&#xff0c;单源最短路径迪杰斯特拉。图由顶点和边构成&#xff0c;度用来说明该顶点邻接边的数量情况。权值说明了边的…...

ABAP语言的动态编程(4) - 综合案例:管理费用明细表

本篇来实现一个综合案例&#xff1a;管理费用明细表。报表在实际项目中&#xff0c;也有一定的参考意义&#xff0c;一方面展示类似的报表&#xff0c;比如管理费用、研发费用等费用的明细&#xff0c;使用业务比较习惯的展示格式&#xff1b;另一方面正好综合运用前面学习的动…...

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A&#xff1a;日期统计 思路分析&#xff1a; 本题的题目比较繁琐&#xff0c;我们采用暴力加DFS剪枝的方式去做&#xff0c;我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串&#xff0c;但是还是会存在19月的情况&#xff0c;为此还需要在CHECK函数…...

R语言零基础系列教程-01-R语言初识与学习路线

代码、讲义、软件回复【R语言01】获取。 R语言初识 R是一个开放的统计编程环境&#xff0c;是一门用于统计计算和作图的语言。“一切皆是对象”&#xff0c;数据、函数、运算符、环境等等都是对象。易学&#xff0c;代码像伪代码一样简洁&#xff0c;可读性高强大的统计和可视…...

即时通讯平台测试报告

1.项目概述 项目名称&#xff1a;即时通讯平台 版本号&#xff1a;V1.0.0 测试周期&#xff1a;2025年2月25日--2025年3月15日 测试目标&#xff1a;验证核心功能&#xff08;登录、注册、消息收发、用户管理、群组功能等&#xff09;的稳定性和性能指标。 2. 测试范围 功…...

蓝桥杯单片机内存爆了怎么办

蓝桥杯单片机内存爆了怎么办 文章目录 蓝桥杯单片机内存爆了怎么办一、参考文章二、内存区3、keil中的体现4、分配原则5、使用示例 一、参考文章 文章1 文章2 文章3 文章4 二、内存区 1 KB(千字节) 1024 B(字节) B代表Byte&#xff0c;1Byte8bit&#xff0c;一个字节8位 …...

一周热点:微软攻克语音输入、文本输出难题-Phi-4-multimodal

微软Phi-4-multimodal模型是人工智能领域的一个重要进展,它标志着微软在多模态人工智能技术上的突破。以下是对该模型的详细解释: 模型概述 微软Phi-4-multimodal是一个能够同时处理文本、图像和语音的多模态大型语言模型。它通过创新的架构和训练方法,实现了在不同模态之间…...

量化交易学习笔记02:双均线策略

双均线策略示例 个股&#xff1a;中国平安 回测日期&#xff1a;2022-5-1至2023-5-1 短均线&#xff1a;5天 长无线&#xff1a;10天 代码&#xff1a; def initialize(context):# 初始化此策略# 设置我们要操作的股票池, 这里我们只操作一支股票# """标的&qu…...

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

在 WRF 中,LCZ 通过 URBPARM_LCZ.TBL 进行配置,但如果 FRC_URB2D 变量缺失,WRF 会回退到默认的 URBPARM.TBL。 主要问题概述 WRF-Model-cglc-modis-lcz_100m dataset " WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL USING DEFAULT URBAN MORPHOLOGY&q…...

Selenium 自动化测试学习总结

大概了解一下即可&#xff0c;现在主要用的自动化工具是 playWright&#xff0c;它可以录制操作。 selenium是老款自动化测试工具&#xff0c;仍有很多可取之处。 安装&#xff1a; pip install selenium即可。然后下载浏览器的驱动包&#xff0c;注意不是浏览器&#xff01;…...

开源通义万相本地部署方案,文生视频、图生视频、视频生成大模型,支持消费级显卡!

开源通义万相本地部署方案&#xff0c;文生视频、图生视频、视频生成大模型&#xff0c;支持消费级显卡&#xff01; 万相2.1开源 近日&#xff0c;大模型万相2.1&#xff08;Wan&#xff09;重磅开源&#xff0c;此次开源采用Apache2.0协议&#xff0c;14B和1.3B两个参数规格…...

Suno的对手Luno:AI音乐开发「上传参考音频 - 方式一:通过二进制流的方式」 —— 「Luno Api系列|AI音乐API」第11篇

导读 今天来看下Luno Api的上传参考音频 - 方式一&#xff1a;通过二进制流的方式。 参考文件&#xff0c;主要是用于在创作的过程中&#xff0c;希望AI参考这个音乐的曲风和声音来进行创作&#xff0c;那么可以通过上传参考音乐来进行实现。 申请和使用 「已经有API的&…...

微信小程序刷题逻辑实现:技术揭秘与实践分享

页面展示&#xff1a; 概述 在当今数字化学习的浪潮中&#xff0c;微信小程序以其便捷性和实用性&#xff0c;成为了众多学习者刷题备考的得力工具。今天&#xff0c;我们就来深入剖析一个微信小程序刷题功能的实现逻辑&#xff0c;从代码层面揭开其神秘面纱。 小程序界面布局…...

巴耶赫利专业俄语外贸网站建设

巴耶赫利是专业俄语外贸网站建设与俄语搜索引擎Yandex SEO优化服务商。巴耶赫利致力于帮助中国品牌出海俄罗斯&#xff0c;打开俄罗斯市场&#xff0c;提升品牌在俄罗斯的知名度和美誉度。 以下是对巴耶赫利相关服务的详细介绍&#xff1a; 一、巴耶赫利专业俄语外贸网站建设…...

每日Attention学习25——Multi-Scale Attention Fusion

模块出处 [TCSVT 24] [link] [code] DSNet: A Novel Way to Use Atrous Convolutions in Semantic Segmentation 模块名称 Multi-Scale Attention Fusion (MSAF) 模块作用 双级特征融合 模块结构 模块思想 MSAF的主要思想是让网络根据损失学习特征权重&#xff0c;允许模型…...

前端学习记录:解决路由缓存问题

问题描述&#xff1a;响应路由参数的变化&#xff0c;使用带有参数的路由时需要注意的是&#xff0c;当用户从 /users/johnoy 导航到 /users/jolyne 时&#xff0c;相同的组件实例将会被重复使用。因为两个路由都渲染同个组件&#xff0c;比起销毁再创建&#xff0c;复用则显得…...

VSTO(C#)Excel开发10:启动和卸载顺序 事件处理 监视变化

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

代码随想录Day16

Day16 二叉树part06 LeetCode 530.二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 输入&#xff1a;root [4,2,6,1,3] 输出&…...

第15章:ConvNeXt图像分类实战:遥感场景分类【包含本地网页部署、迁移学习】

目录 1. ConvNeXt 模型 2. 遥感场景建筑识别 2.1 数据集 2.2 训练参数 2.3 训练结果 2.4 本地部署推理 3. 下载 1. ConvNeXt 模型 ConvNeXt是一种基于卷积神经网络&#xff08;CNN&#xff09;的现代架构&#xff0c;由Facebook AI Research (FAIR) 团队在2022年提出。…...

LinuX---Shell脚本创建和执行

概述&#xff1a; 它是一个命令行解释器&#xff0c;接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 Shell还是一个功能强大的编程语言&#xff0c;易编写、易调试、灵活性强。 Linux提供的Shell解析器有 atguiguubuntu:~$ cat /etc/shells # /etc/shells: valid …...

django+vue3实现前后端大文件分片下载

效果&#xff1a; 大文件分片下载支持的功能&#xff1a; 展示目标文件信息提高下载速度&#xff1a;通过并发请求多个块&#xff0c;可以更有效地利用网络带宽断点续传&#xff1a;支持暂停后从已下载部分继续&#xff0c;无需重新开始错误恢复&#xff1a;单个块下载失败只…...

KY-038 声音传感器如何工作以及如何将其与 ESP32 连接

想为您的项目赋予声音感!然后跟着做,因为在这个项目中,我们将连接一个声音传感器,用它构建一些有趣的项目。我们使用的 KY-038 声音传感器使用电容式麦克风来检测声波,这为我们提供了稳定性和可靠性的完美平衡。因此,在本文中,我们决定将 KY-038 传感器与 ESP32 连接,并…...

深入剖析二分查找的延伸:在排序数组中查找元素的第一个和最后一个位置

深入剖析二分查找的延伸&#xff1a;在排序数组中查找元素的第一个和最后一个位置 引言 二分查找&#xff0c;作为算法界的“常青树”&#xff0c;以其高效性和简洁性备受青睐。然而&#xff0c;许多初学者仅限于使用它查找单个元素&#xff0c;而对其进阶应用知之甚少。今天…...

UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState 关系描述 GameMode&#xff1a;定义游戏规则和逻辑&#xff0c;控制游戏的开始、进行和结束。GameState&#xff1a;存储和同步全局游戏状态&#xff0c;如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState&#xff1a;GameMode在游戏…...

使用Python获取并操作1688自定义API接口

在电子商务领域&#xff0c;1688作为国内领先的B2B平台&#xff0c;提供了丰富的API接口&#xff0c;允许开发者获取商品信息、店铺信息等。其中&#xff0c;custom接口允许开发者进行自定义操作&#xff0c;获取特定的数据。本文将详细介绍如何使用Python调用1688的custom接口…...

【AI】现代人工智能技术的应用与发展

引言 人工智能&#xff08;AI&#xff09;已经深入到我们生活的各个方面&#xff0c;涉及医疗、教育、交通、金融等众多领域。随着技术的不断发展&#xff0c;AI的应用和潜力也变得愈加广泛。本文将详细介绍人工智能的应用领域&#xff0c;探讨未来的发展趋势&#xff0c;并通…...

小程序渲染之谜:如何解决“加载中...”不消失的 Bug(glass-easel)

&#x1f389; 小程序渲染之谜&#xff1a;如何解决“加载中…”不消失的 Bug &#x1f389; 引言 在小程序开发中&#xff0c;渲染问题总能让人抓狂。&#x1f62b; 这次&#xff0c;我遇到了一个奇怪的 bug&#xff1a;产品详情页的内容已经正常显示&#xff0c;但页面却一…...

C语言结构体全面解析 | 从入门到精通

&#x1f4da; C语言结构体全面解析 | 从入门到精通 整理&#xff1a;算法练习生| 转载请注明出处 &#x1f4d1; 目录 结构体的定义与使用结构体变量的参数传递结构体数组结构体指针typedef关键字结构体初始化 1️⃣ 结构体的定义与使用 为什么需要结构体&#xff1f; 当…...

Trae与Builder模式初体验

说明 下载的国际版&#xff1a;https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的&#xff0c;遇到问题反馈一下&#xff0c;AI就帮忙解决了&#xff0c;真是动动嘴&#xff08;打打字就行了&#xff09;&#xff0c;做些小的原型效果或演示Demo很方便呀&#xff…...

麒麟服务器操作系统QT系列软件工具手册

QtCreator****功能介绍 QtCreator 概述 Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 [Nokia](https://baike.baidu.com/item/Nokia/264012" /t “_blank) 收购后推出的一款新的轻量级[集成开发环境](https://baike.baidu.com/item/集成开发环境/298524” /t “_…...

【HeadFirst系列之HeadFirstJava】第18天之深入理解原型模式:从问题到解决方案(含 Java 代码示例)

深入理解原型模式&#xff1a;从问题到解决方案&#xff08;含 Java 代码示例&#xff09; 在软件开发中&#xff0c;我们经常需要创建对象&#xff0c;而有些对象的创建成本较高或者结构较为复杂。如何在不破坏封装的前提下&#xff0c;高效地创建对象&#xff1f; 这正是**原…...

JetsonOrin源码安装部署PaddlePaddle

Jetson Orin 源码安装部署Paddle 部署环境 系统架构: Arm CUDA: 11.4 cmake: 3.18.0 python:3.8 注意环境中的版本问题&#xff0c;之前装onnxruntime的时候cmake被升级到了3.31.0&#xff0c;但是编译Paddle时会报错&#xff0c;因此特意降级回了官方推荐的3.18.0 具体环…...

入门到入土,Java学习 day20(多线程下)

void wait() 当前线程等待&#xff0c;直到被其他线程唤醒 void notify() 随机唤醒单个线程 void notifyAll() 唤醒所有线程 阻塞队列 在测试方法中创建带锁队列&#xff0c;然后在对象类中也创建队列但是不赋值&#xff0c;用构造方法将测试方法中的对象赋值 然后用put和t…...

【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

栈(LIFO)算法题

1.删除字符串中所有相邻的重复字符 注意&#xff0c;我们需要重复处理&#xff0c;而不是处理一次相邻的相同元素就结束了。对示例来说&#xff0c;如果只进行一次处理&#xff0c;结果为aaca&#xff0c;但是处理之后又出现了相邻的重复元素&#xff0c;我们还得继续处理&…...

印章/公章识别:PaddleX下的“Seal-Recognition”模型

最近做项目需要对印章进行识别&#xff0c;并提取其中的印章文字&#xff0c;又不希望这个模型太大&#xff0c;还要方便部署&#xff0c;于是乎这个模型是个不错的选择。 一、模型简介 “Seal-Recognition”模型是PaddleX旗下的一款模型&#xff08;PaddleX 是基于飞桨框架构…...

从LLM出发:由浅入深探索AI开发的全流程与简单实践(全文3w字)

文章目录 第一部分&#xff1a;AI开发的背景与历史1.1 人工智能的起源与发展1.2 神经网络与深度学习的崛起1.3 Transformer架构与LLM的兴起1.4 当前AI开发的现状与趋势 第二部分&#xff1a;AI开发的核心技术2.1 机器学习&#xff1a;AI的基础2.1.1 机器学习的类型2.1.2 机器学…...

DeepSeek入门宝典——行业应用篇

大家好&#xff0c;我是吾鳴。 今天吾鳴要给大家分享一份由51CTO智能研究院出品的DeepSeek报告——《DeepSeek入门宝典——行业应用篇》。这份报告主要从DeepSeek核心能力、行业赋能与应用案例、合作伙伴与生态建设和学习资料与体系化方案做了详细的介绍&#xff0c;报告一共有…...

K8S学习之基础三十一:k8s中RBAC 的核心概念

Kubernetes (k8s) 中的 RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;是一种用于管理用户和服务账户对集群资源访问权限的机制。RBAC 允许管理员通过定义角色&#xff08;Role&#xff09;和角色绑定&#xff08;RoleBinding&#xff…...

JAVA数据库技术(一)

JDBC 简介 JDBC&#xff08;Java Database Connectivity&#xff09;是Java平台提供的一套用于执行SQL语句的Java API。它允许Java程序连接到数据库&#xff0c;并通过发送SQL语句来查询、更新和管理数据库中的数据。JDBC为不同的数据库提供了一种统一的访问方式&#xff0c;使…...

【Agent】OpenManus-Flow组件详细分析

1. Flow架构概述 OpenManus 的Flow组件实现了一个灵活的工作流管理系统&#xff0c;主要用于协调多个智能体的协作&#xff0c;以完成复杂任务。Flow组件的核心是基于计划的执行模型&#xff0c;它将任务分解为一系列步骤&#xff0c;然后逐步执行这些步骤&#xff0c;直到任务…...

MySQL环境安装详细教程(Windows/macOS/Linux)

摘要&#xff1a;本文详细介绍了在Windows、macOS和Linux三大操作系统下安装MySQL数据库的完整流程&#xff0c;帮助开发者快速搭建本地MySQL环境。 一、MySQL安装前准备 官网下载 访问MySQL官网 → 选择"Downloads" → 选择"MySQL Community (GPL) Downloads&…...

【人工智能基础2】人工神经网络、卷积神经网络基础、循环神经网络、长短时记忆网络

文章目录 三、人工神经网络1. 神经元感知模型2. 神经网络模型3. 学习规则:修改神经网络的权重和偏置反向传播算法&#xff08;BP&#xff09;优化器 - 梯度下降法 四、卷积神经网络基础&#xff08;CNN&#xff09;1. 基本原理2. 计算过程 五、循环神经网络&#xff08;RNN&…...

如何查看windows系统的硬件环境(附方法

方法一&#xff1a;使用命令指示符查询 在“开始”菜单中搜索&#xff1a;命令指示符&#xff0c;并以管理员身份打开&#xff0c; 输入&#xff1a;systeminfo&#xff0c;就可以查看硬件、CPU、处理器等详细内容 systeminfo 方法二&#xff1a;在资源监视器中查看 按住 “…...

基于树莓派的水果分类系统(论文+源码)

针对小型农户的在水果加工销售环节中的分类需求&#xff0c;本文设计并实现了基于树莓派的视觉识别分类系统。本章根据所选水果的具体情况&#xff0c;简述系统各模块的实现方法&#xff0c;设计树莓派的程序算法&#xff0c;并选择合适的器件型号&#xff0c;开发所用的辅助工…...

Gemini Robotics:将人工智能带入物理世界

25年3月来自谷歌的技术报告“Gemini Robotics: Bringing AI into the Physical World”。 大型多模态模型的最新进展&#xff0c;已使数字领域出现卓越的通才能力&#xff0c;但将其转化为机器人等物理智体仍然是一项重大挑战。一般有用的机器人需要能够理解周围的物理世界&am…...