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

@Excel若依导出异常/解决BusinessBaseEntity里面的字段不支持导出

今天发现所有实体类继承BusinessBaseEntity里面的这些通用字段不支持导出,debug时发现是这样:

导出效果

 这里我把能查到的方法都汇总了,如果你也遇到这个异常,可以去逐步排查

1.先看库里有没有数据

2.看字段名是否对齐

3.所需要导出的字段是否正确加上@Excel注解

4.检查注解内部是不是被加注了type = Excel.Type.IMPORT

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@TableField(value = "create_time", fill = FieldFill.INSERT)@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.IMPORT)private Date createTime;

 因为这个type是控制数据通道的,通过详细代码可以看到这是控制此字段仅允许被导入

 

5.检查xml里面的SQL是否对应,因为涉及到关联表的时候,这个通用字段大家都有,如果需要查询就必须要指定是查哪个表

    /** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@TableField(value = "create_time", fill = FieldFill.INSERT)@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)private Date createTime;

到这里一般就可以解决了,但如果到这里还不行可以试试我下面这个方法,通过反射去获取导出的实体类的父类的带@Excel注解的字段,再把子类的值赋值上来,进行导出

这里补充一下各个用法:

属性类型用途示例
nameString定义Excel列的名称,用于Excel表头。@Excel(name = "学生姓名")
widthdouble定义列宽度,单位为字符。@Excel(width = 20)
heightdouble定义行高,单位为磅。仅对导出有效。@Excel(height = 10)
orderNumString定义列的显示顺序。@Excel(orderNum = "1")
needMergeboolean表示是否需要合并单元格。@Excel(needMerge = true)
mergeVerticalboolean表示是否纵向合并单元格。@Excel(mergeVertical = true)
mergeRelyint[]指定合并单元格时依赖的列,数组中的数字为列的索引。@Excel(mergeRely = {1})
isImportFieldString定义是否为导入字段,“true"或"false”。@Excel(isImportField = "true")
isWrapboolean定义是否自动换行。@Excel(isWrap = true)
exportFormatString定义导出时的格式化模式,如日期格式。@Excel(exportFormat = "yyyy-MM-dd")
importFormatString定义导入时的格式化模式。@Excel(importFormat = "yyyy-MM-dd")
imageTypeint定义图片类型(如1表示从文件导入,2表示从数据库导入)。@Excel(imageType = 1)
suffixString定义文本后缀,如在文本后添加特定的后缀。@Excel(suffix = "%")
typeint定义字段类型(如1表示文本,2表示图片)。@Excel(type = 1)
enumExportFieldString定义枚举导出时,调用枚举字段的哪个方法获取实际的值。@Excel(enumExportField = "getText")
savePathString定义图片保存路径,仅对导入有效。@Excel(savePath = "/tmp")
dateFormatString简化的日期格式设置,简化的exportFormat/importFormat。@Excel(dateFormat = "yyyy-MM-dd")
use1904windowingboolean定义是否使用1904年日期窗口。@Excel(use1904windowing = true)
fixedIndexint指定Excel列的索引,从0开始,用于导入时准确匹配列位置。@Excel(fixedIndex = 0)
groupNameString用于分组导出/导入时定义的组名。@Excel(groupName = "group1")
dictString用于指定数据字典,将数据转换为对应的文本值。@Excel(dict = "sex=1_男,2_女")
replaceString[]定义要替换的值,用于导出时将字段值替换为指定的文本值。@Excel(replace = {"男_1", "女_2"})
statisticsboolean定义是否进行统计,用于对数字字段进行求和统计。@Excel(statistics = true)

6.用代码,里面有判定继承关系的方法、利用类的反射,获取类的注解、获取类的父类、字段名等方法可以参考

/*** 对list数据源将其里面的数据导入到excel表单* * @param response 返回数据* @param list 导出数据集合* @param sheetName 工作表的名称* @return 结果*/public void exportExcel(HttpServletResponse response, List<T> list, String sheetName){
//        if(list.size()>0){
//            //获取父类带Excel注解的字段
//            List<String> elementList=getSuperClasseExcel(list.get(0).getClass());
//            for (String s : elementList) {
//                list=setBusinessBaseEntity(list,s);
//            }exportExcel(response, list, sheetName, StringUtils.EMPTY);
//        }}//把业务实体父类的指定属性赋值到子类private List<T>  setBusinessBaseEntity(List<T> list,String element) {for (T t : list) {try {// 获取 T 的 createTime 字段Field createTimeField = getDeclaredFieldIncludingSuperclasses(t.getClass(), element);if (createTimeField != null) {createTimeField.setAccessible(true);// 获取父类的 createTime 字段值Object parentValue = getFieldValueIncludingSuperclasses(t, element);// 如果父类有 createTime 字段值,则赋值给当前对象if (parentValue != null) {createTimeField.set(t, parentValue);}}} catch ( IllegalAccessException e) {e.printStackTrace();}}return  list;}private static Field getDeclaredFieldIncludingSuperclasses(Class<?> clazz, String fieldName) {while (clazz != null) {try {return clazz.getDeclaredField(fieldName);} catch (NoSuchFieldException e) {// 继续查找父类clazz = clazz.getSuperclass();}}return null;}private static Object getFieldValueIncludingSuperclasses(Object obj, String fieldName) throws IllegalAccessException {Class<?> clazz = obj.getClass();while (clazz != null) {try {Field field = clazz.getDeclaredField(fieldName);field.setAccessible(true);return field.get(obj);} catch (NoSuchFieldException e) {// 继续查找父类clazz = clazz.getSuperclass();}}return null;}//获取父类带Excel注解的字段
//    private List<String> getSuperClasseExcel(Object object) {
//        //先判断是否继承自BusinessBaseEntity
//        List<String> elementList = new ArrayList<>();
//        //再把BusinessBaseEntity中有@Excel注解的字段收集起来
//
//        // 获取父类
//        Class<Object> clazz = object;
//
//        // 获取父类
//        Class<?> superClass = clazz.getSuperclass();
//
//        if (superClass != null) {
//            System.out.println("有" + superClass.getSimpleName());
//        } else {
//            System.out.println("无");
//        }
//
//
//
//
//if (object instanceof BusinessBaseEntity) {BusinessBaseEntity b = new BusinessBaseEntity() {};Class<?> clazz = b.getClass();
//            while (clazz != null) {for (Field field : clazz.getDeclaredFields()) {if (field.isAnnotationPresent(Excel.class)) {elementList.add(field.getName());Excel excelAnnotation = field.getAnnotation(Excel.class);System.out.println("Field: " + field.getName()+ " has Excel annotation with value: " + excelAnnotation.name());}}
//            }}
//        return elementList;
//    }

7.如果还是不能解决,可以排查一下是不是日期格式异常,这种情况一般会报错:org.apache.poi.ss.usermodel.Cell.setCellValue

可以建一个工具类DateFormatTransition(但注意需要alibaba导excel的包

package com.ruoyi.common.convert;import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;import java.text.SimpleDateFormat;
import java.util.Date;/*** 日期格式转换  用于导出日期类异常* @fly 2024-11-01 16:41:55**/
public class DateFormatTransition implements Converter<Date> {private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";@Overridepublic Class<?> supportJavaTypeKey() {return Converter.super.supportJavaTypeKey();}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return Converter.super.supportExcelTypeKey();}@Overridepublic WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);String dateValue = sdf.format(value);return new WriteCellData<>(dateValue);}
}

具体使用:

@ExcelProperty(value = "创建时间",converter = DateFormatTransition.class)
private Date createTime;

8.最后记得检查一下工具类是否含有get、set方法或者使用了lombok的情况下直接在类上加上@Data注解

因为子类的toString方法虽然已经重写,内部也有基于这些通用字段的get和set方法,这是将父类的字段继承过来再进行get和set操作的,但父类是没有这些通用字段的get和set方法,就不能在导出时正常赋值,从而导致导出的excel表列数据为空

相关文章:

@Excel若依导出异常/解决BusinessBaseEntity里面的字段不支持导出

今天发现所有实体类继承BusinessBaseEntity里面的这些通用字段不支持导出&#xff0c;debug时发现是这样&#xff1a; 导出效果 这里我把能查到的方法都汇总了&#xff0c;如果你也遇到这个异常&#xff0c;可以去逐步排查 1.先看库里有没有数据 2.看字段名是否对齐 3.所需要…...

虚拟机 Email 恢复专用工具:Virtual Machine Email Recovery

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 SysTools 系列数据恢复、取证及…...

代理人工智能如何应对现代威胁的速度和数量

Seven AI首席执行官 Lior Div 讨论了代理 AI 的概念及其在网络安全中的应用。他解释了代理 AI 与传统自动化安全系统的区别&#xff0c;即代理 AI 具有更大的自主性和决策能力。 Div 强调&#xff0c;通过实时处理大量警报&#xff0c;代理 AI 特别适合对抗现代 AI 驱动的威胁…...

element-plus版本过老,自写选项弹框增删功能

title: element-plus版本过老&#xff0c;自写选项弹框增删功能 date: 2024-10-31 10:53:18 tags: element-plus 1.情景 发现代码怎么都用不了el-select的#footer插槽从而实现不了相关的操作&#xff0c;发现el-select自带的管理相关数据的属性popper-class用不了。 2.原因与…...

Python毕业设计选题:基于django+vue的宠物寄养平台的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 1. 前台系统功能模块 系统首页界面 用户注册界面 用户登录界面 宠物商城界面 宠物店…...

计算机后台服务-更新下载,重启————未来之窗行业应用跨平台架构

一在教育中应用 1. 提高效率&#xff1a;能够快速收集大量学生的卷子&#xff0c;节省了传统人工收集和整理的时间。 2. 准确性&#xff1a;减少了人工收卷过程中可能出现的错漏和混乱&#xff0c;确保每份卷子都能准确无误地被收集和记录。 3. 即时性&#xff1a;可以实时接收…...

springcloud通过MDC实现分布式链路追踪

在DDD领域驱动设计中&#xff0c;我们使用SpringCloud来去实现&#xff0c;但排查错误的时候&#xff0c;通常会想到Skywalking&#xff0c;但是引入一个新的服务&#xff0c;增加了系统消耗和管理学习成本&#xff0c;对于大型项目比较适合&#xff0c;但是小的项目显得太过臃…...

logback日志级别动态切换四种方案

生产环境中经常有需要动态修改日志级别。 现在就介绍几种方案 方案一&#xff1a;开启logback的自动扫描更新 配置如下 <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"60 seconds" debug…...

AI视频管理平台中使用目标检测模型中的NMS参数原理及设置原则

目标检测模型中的NMS参数原理及设置原则 在目标检测模型中&#xff0c;非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;简称NMS&#xff09;是一种常用的后处理技术&#xff0c;用于筛选和保留最佳的检测框。本文将详细介绍NMS的原理、参数设置原则以及实际应用…...

从零开始点亮一个LED灯 —— keil下载、新建工程、版本烧录、面包板使用、实例代码

一、keil下载 参考视频&#xff1a;Keil5安装教程视频 (全套资料51和32皆可用Keil5编译设置)_哔哩哔哩_bilibili 视频内容包括下载链接、安装教程、库导入&#xff0c;非常详细&#xff01; 二、新建工程 2.1.使用stm32CubeMX新建工程 10. 使用STM32CubeMX新建工程 — [野…...

[pdf,epub]105页《分析模式》漫谈合集01

105页的《分析模式》漫谈合集第1集的pdf、epub文件&#xff0c;已上传到本账号的CSDN资源。 如果无法下载&#xff0c;也可以访问umlchina.com/url/ap.html 已排版成适合手机阅读&#xff0c;pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》&#xff1f; ★[缝合故…...

计算机网络5层模型

应用层常见协议 DNS协议 作用:用于实现网络设备名字到IP地址映射的网络服务 特点:DNS是因特网使用的命名系统&#xff0c;它将人们易于记忆的主机名(如www.example.com)转换为机器可识别的IP地址。 FTP协议 作用:用于实现交互式文件传输功能。 特点:FTP支持Standard(主动…...

Python毕业设计选题:基于Python的无人超市管理系统-flask+vue

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 超市商品详情 购物车 我的订单 管理员登录界面 管理员功能界面 用户界面 员…...

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…...

Java面试经典 150 题.P80. 删除有序数组中的重复项 II(004)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums)…...

【Three.js】SpriteMaterial 加载图片泛白,和原图片不一致

解决方法 如上图所示&#xff0c;整体泛白了&#xff0c;解决方法如下&#xff0c;添加 material.map.colorSpace srgb const imgTexture new THREE.TextureLoader().load(imgSrc)const material new THREE.SpriteMaterial({ map: imgTexture, transparent: true, opacity:…...

了解神经网络中的激活函数

一、激活函数的特征 非线性&#xff0c;激活函数必须是非线性函数。可微性&#xff0c;训练网络模型时&#xff0c;基于梯度的模型最优化方法要求激活函数必须是可导的。单调性&#xff0c;单调递增或单调递减&#xff0c;单调函数保证模型的简单。隐藏层一般需要使用激活函数…...

配置BGP与IGP交互和路由自动聚合示例

组网需求 如图所示&#xff0c;用户将网络划分为AS65008和AS65009&#xff0c;在AS65009内&#xff0c;使用IGP协议来计算路由&#xff08;该例使用OSPF做为IGP协议&#xff09;。要求实现两个AS之间的互相通信。 配置思路 采用如下的思路配置BGP与IGP交互&#xff1a; 在AR…...

代码随想录算法训练营第三十三天 | 62.不同路径 63.不同路径

LeetCode 62.不同路径&#xff1a; 文章链接 题目链接&#xff1a;62.不同路径 思路&#xff1a; 动态规划 使用二维数组保存递推结果 ① dp数组及下标含义 dp[i][j]&#xff1a;表明从(0, 0)到下标为(i, j)的点有多少条不同的路径 ② 递推式&#xff1a; 机器人只能向下或向…...

使用Flask构建RESTful API

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Flask构建RESTful API Flask简介 环境搭建 安装Flask 项目结构 创建应用 路由定义 请求处理 获取查询参数 获取请求体 响应…...

AI数据标注实战:如何高效、准确地标注训练数据

在AI模型的开发与迭代过程中&#xff0c;数据标注是连接原始数据与智能算法的关键桥梁&#xff0c;其质量与效率直接决定了模型的性能上限。对于软件测试从业者而言&#xff0c;掌握高效、准确的数据标注方法&#xff0c;不仅能为AI模型提供可靠的训练“食粮”&#xff0c;更能…...

CodeWave项目导出实战:从云端到本地的完整避坑指南(含数据库配置与端口冲突解决)

CodeWave项目导出实战&#xff1a;从云端到本地的完整避坑指南&#xff08;含数据库配置与端口冲突解决&#xff09; 当开发者完成CodeWave平台上的应用构建后&#xff0c;如何将项目顺利迁移至本地环境往往成为新的挑战。不同于云端的一键部署&#xff0c;本地化过程涉及环境差…...

②Allegro PCB转Altium Designer PCB转Pads Layout PCB

在工作中&#xff0c;难免会遇到主流画板EDA软件(Pads、Altium Designer、Cadence allegeo、嘉立创EDA等)文件格式相互间转换的问题。下面来介绍一下Allegro PCB转Pads Layout PCB的详细操作步骤&#xff0c;前面已经介绍过allegro不用经过Altium Designer软件直接转PADS格式pc…...

从CTF靶场到实战:手把手教你复现ctfshow web3的PHP伪协议利用(附BurpSuite抓包技巧)

从CTF靶场到实战&#xff1a;深入解析PHP伪协议利用与BurpSuite实战技巧 在网络安全领域&#xff0c;CTF比赛不仅是检验技能的竞技场&#xff0c;更是学习实战渗透技术的绝佳资源。ctfshow web3这道题目巧妙地将PHP伪协议利用与文件包含漏洞结合在一起&#xff0c;为我们提供了…...

【免费下载】 探索高效Excel处理:OpenXLSX C++读写Excel表格示例项目推荐

探索高效Excel处理&#xff1a;OpenXLSX C读写Excel表格示例项目推荐 项目介绍 在现代软件开发中&#xff0c;处理Excel文件的需求日益增长&#xff0c;尤其是在数据分析、报告生成和企业级应用中。为了满足这一需求&#xff0c;我们推出了OpenXLSX C读写Excel表格示例项目。该…...

从鼠类到人体:汉坦病毒的全球威胁与科研突破

2026年5月17日&#xff0c;加拿大正式确诊一名“洪迪厄斯”号邮轮乘员感染汉坦病毒。结合世界卫生组织&#xff08;WHO&#xff09;的通报&#xff0c;疫情已陆续造成9人感染并出现3例死亡。这引起广泛的关注和担忧。汉坦病毒究竟是哪类病毒呢&#xff1f;感染力强吗&#xff1…...

基于GAN的AI图像水印移除工具VeoWatermarkRemover实战指南

1. 项目概述&#xff1a;一个开源图像水印移除工具 最近在整理一些老照片和网上下载的素材时&#xff0c;经常被图片上那些碍眼的水印、Logo或者时间戳困扰。手动用PS处理&#xff0c;费时费力&#xff0c;而且对批量操作极不友好。直到我发现了GitHub上一个名为“VeoWatermar…...

MicMute:3秒掌握麦克风静音控制,告别会议尴尬时刻

MicMute&#xff1a;3秒掌握麦克风静音控制&#xff0c;告别会议尴尬时刻 【免费下载链接】MicMute Mute default mic clicking tray icon or shortcut 项目地址: https://gitcode.com/gh_mirrors/mi/MicMute 你是否曾在视频会议中因忘记静音而暴露尴尬的聊天背景声&…...

Fluent模拟火箭发动机喷管?试试用分子动理论定义气体属性,避开数据缺失的坑

火箭发动机喷管仿真中的分子动理论实战&#xff1a;突破高温燃气物性数据困境 当你在Fluent中打开火箭发动机喷管的仿真项目时&#xff0c;面对H2/CO/H2O混合燃气在3000K温度梯度下的物性参数定义&#xff0c;是否曾为找不到可靠数据而抓狂&#xff1f;传统方法需要逐个温度点…...

机器学习_03_线性回归

线性回归一、概念与定位类型&#xff1a;监督学习、回归任务定义&#xff1a;用于建模【特征 X】与【连续标签 y】之间的【线性关系】核心思想&#xff1a;找一条直线&#xff08;或超平面&#xff09;&#xff0c;让预测值 ŷ 与真实值 y 的【误差最小】二、模型形式一元线性回…...