【easyExcel】后端将模板文件写入流供前端下载报错,easyexcel下载模板文件出错

news/2024/5/17 14:48:38/文章来源:https://blog.csdn.net/chirp_CQ/article/details/127007909

目录

    • 事件起因
    • 环境和工具
    • 操作过程
    • 解决办法
    • 参考内容:
    • 结束语

事件起因

报错内容(我主要搜索的两个错误内容点):

com.alibaba.excel.exception.ExcelGenerateException: Create workbook failure
和
Caused by: org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file

报错具体内容内容:
在这里插入图片描述
错误描述:我要下载的模板文件放在了后端的服务器上,通过前端点击按钮,后端将excel文件读取并写入到流中返回给前端下载,每次用easyExcel的build时就会报错,所以我也在找原因

点击下载按钮也能下载,但是打开文件就是这个内容:
在这里插入图片描述

环境和工具

idea 2021.1.1
webstorm 2022.2.2
mysql 5.7

操作过程

首先easyExcel的依赖一开始我看到用的是2.2.10版本的,我去easyExcel的官方文档里也找了读取模板文件的范例,发现写法是一样的,在官方文档里的3.x版本和2.x版本的读取模板文件的方式也是一样的,当时我也就没有改这个版本号(这是一个老项目,我只能在老项目的基础上进行修改,尽量少动它的东西)

我发现也不是我的文档被加密等情况(虽然电脑确实安装了公司加密软件,但这个文档我看到确实还没有加密,该情况排除)

小小的发现:
一开始我以为是下面参考内容里面的增加依赖那篇文章里面的内容,仿造他的方法对我的这个进行了改造,但是出现了一个更离谱的情况,更新依赖启动项目后第一次下载没问题,但后面的下载就出现问题了,不管系统重启多少次都没有用(不过已经出现能下载的情况了,那么说明方向没有错,就是依赖导致的

网上搜索的这个错误:Caused by: org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file
最后的矛盾都指向poi这个依赖,大致方向可以确定下来了,然后在网络上考看到一个去除部分依赖的情况,然后根据这个方式尝试了一下就成功解决了

原来的在External Libraries里面找已经下载的poi依赖:
easyexcel去除自带poi依赖,并
上面的导入easyexcel的依赖时去除了本身自带的poi依赖,但是libraries中 却还是有着poi的依赖,说明pom.xml文件中单独导入了这个poi的依赖的:
单独导入的poi
在往下翻找的过程中确实也找到了这个poi,版本号与libraries里的相同,那就是这个了,应该是没有使用easyexcel版本里使用的poi所以导致有一些问题,于是先把这两个单独引入的依赖给注释掉,并把easyexcel排除的poi给导入进来 更新依赖后发现2.2.10版本的easyexcel的poi是下面这个版本的:
2.2.10版本的poi
然后我重启项目,系统又报了一些莫名其妙的错误(应该是代码里面的其他地方有使用更高版本的poi里面的内容,2.2.10版本easyexcel里的3.17的poi版本有些低了,有些功能可能没有),于是我更新了easyexcel的版本到最新版3.1.0 该版本的easyexcel使用的poi版本也发生了相应的变化(easyexcel 3.1.0使用的是4.1.2版本的poi与原来手动导入的4.1.0相差不大,能够向下兼容)
在这里插入图片描述
然后再重启项目,我的项目就启动成功了。
之后我下载的模板也就没有问题了

解决办法

大致的解决办法就是easyexcel他本身有使用默认版本的poi,但是这个项目里,他手动排除掉了easyexcel版本的poi,然后又自己单独引用了一个4.1.0版本的poi,版本的差异过大导致的错误,我去除了他单独导入的poi包,升级了easyexcel更高版本的(且版本的这个写入模板的代码写法相同),这个更高版本的poi使用的是4.1.2版本的poi,原手动导入的poi版本是4.1.0,相差不大,项目正常启动运行

参考内容:

在网上也翻遍了很多的解决办法,有说公司软件把那个文档给加密的,也有说依赖有问题的,还有说依赖冲突的
在解决之后笔者觉得笔者遇到的这个问题应该属于依赖冲突

文档被加密:https://blog.csdn.net/shujuku____/article/details/122495782

增加依赖:https://blog.csdn.net/notfound4043/article/details/123882230

依赖冲突:https://www.jianshu.com/p/416059406264

对了还有一种情况说的是:可能你的流没有关闭!!在使用了inputStream后,结束时inputStream.close()这个记得调用一下

结束语

若是对你有所帮助的话,希望能获得你的 点赞、评论、收藏,这将是对我很大的鼓励!!! 这对我真的很重要!!!
蟹蟹٩(‘ω’)و

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_12898.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kingbaseES(人大金仓)数据库语法和常用函数 以及 踩坑记录

前言 最近公司弄了个新项目,数据库指定使用kingbase数据库 刚开始一看这名字都不知道这是啥数据库,后来百度一搜,看到中文名字就知道了。 虽然没用过,但那几个国产数据库也听说过 这不,刚开始用,语法都不熟…

概率统计·概率论的基本概念【条件概率】

条件概率 定义 条件概率与积事件的区别 条件概率——在A事件发生的前提下,发生B 积事件——AB同时发生 性质 **注意(3)要在B1,B2……是互斥事件 (6)用得多 纯乐,自己都说了(6&…

数智赋能,美创助力绍兴市上虞区建设医共体管理平台

什么是医共体? 开展县域医共体建设是深化医改的重要步骤和制度创新,旨在通过医共体模式,推动医疗卫生服务供给侧结构性改革,调整优化医疗资源结构布局,促进医疗卫生工作重心下移和资源下沉,提升基层服务能力…

瑞吉外卖(14) - 上传文件功能开发

文章目录文件上传介绍文件上传代码实现查看效果新建CommonController类断点测试转存文件取消拦截器过滤LoginCheckFilter.java运行测试完善功能编写application.xml编写CommonController.java运行测试完善二级目录编写application.yml编写CommonControler.java测试成功文件上传…

使用streamstring实现格式化输入

目的:在windows系统写c项目,常用sscanf_s进行格式化输入。但是在ubuntu系统上发现sscanf_s不可用(只有sscanf可用,但是它是c 99 的函数了)。后面查阅知道,这个sscanf_s函数是微软专有的函数,不具…

linux 竞态与并发编程

前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文…

Mapper代理开发

Mapper代理开发一. Mapper代理开发概述二. 使用Mapper代理要求(重点中的重点)三. 实操的代码main目录下的java目录中1. UserMapper接口2. User类3. MybatisDemo类main目录下的resources目录中1. UserMapper.xml2. logback.xml3. mybatis.xml一. Mapper代理开发概述 之前我们写的…

【SpringBoot2】02-SpringBoot中如何修改依赖的版本

Spring Boot 中修改依赖版本 如果默认版本号不合适,我们可以修改版本号。 首先,打开当前项目的 pom.xml 文件,查看 spring-boot-dependencies-2.7.4.pom 中规定当前依赖的版本。 例如,我想修改 MySQL 驱动版本,我先看…

OPSS-PEG-Acrylate,OPSS-PEG-AC,巯基吡啶-聚乙二醇-丙烯酸酯试剂供应

英文:OPSS-PEG-Acrylate,OPSS-PEG-AC 中文:巯基吡啶-聚乙二醇-丙烯酸酯 2、 CAS number; N/A 3、The category;Acrylate/Acrylamide PEG Orthopyridyl disulfide (OPSS) PEG 4、Molecular weight:巯基吡…

队列(C语言)

文章目录前言概念基本操作循环队列少用一个元素空间栈队列前言 本篇进行队列的学习。使用C语言实现 概念 排队是体现了“先来先服务”的原则。 在多道程序运行的计算机系统中,可以同时有多个作业运行,他们的运算结果都需要通过通道输出,若通…

[架构之路-3]:软件架构师也是魔法师,架构师应具备的四大方面的技能

目录 前言: 一、业务能力(业务领域)-- 面向业务 1.1 业务场景 1.2 业务技能 二、沟通能力(管理领域) -- 面向“人” 三、技术能力(计算机领域) -- 面向计算机 3.1 硬件技能 3.2 软件技能…

一个有点意思的网站 - 语雀

在这个平台上面创建了一个文档:CWIKIUS 语雀 Confluence Confluence 的问题就是太臃肿,不兼容 MD 格式。 但是,Confluence 和 JIRA 重度集成,因此成为很多公司文档的标配。 语雀 试用了下这个文档工具,整体上来说…

我们如何一键将录音转换成文字?

最近有很多小伙伴向我求助说,他的职业是一名记者,因为每次采访都要进行对话录音,可是每次结束后都需要再去对录音进行整理,花费了大量的时间。因此他总是在加班,他想改变这一现状却不知道该怎么办。其实我们不必如此麻…

platform.pk8 和platform.x509.pem转jks

/** OpenSSL */ 下载地址:http://slproweb.com/products/Win32OpenSSL.html 环境配置: openssl 安装后查看是否安装成功,需要以管理员身份运行cmd查看 cmd输入openssl出现下面显示,表示配置成功,openssl可以使用 pla…

VUE v-bind 数据绑定

动态的绑定一个或多个 attribute,也可以是组件的 prop。缩写: : 或者 . (当使用 .prop 修饰符) 期望: any (带参数) | Object (不带参数) 参数: attrOrProp (可选的) 修饰符:.camel ——将短横线命名的 attribute 转变为驼峰式命名。 .prop ——强制绑定为 DOM property。…

kafka 安装

目录 Docker安装 1.安装Docker 2.搜索docker镜像 3.安装Zookeeper 4. 安装kafka 5.启动kafka ​​​​​​​ Linux安装 1.kafka下载 2.安装JDK 3.安装zookeeper 4.安装kafka 5.启动kafka zookeeper上查看kafka的节点 1.进入zookeeper容器 2.运行客户端 3.查看ka…

MongoDB --- 聚合查询

什么是聚合查询 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce(在5.x已经弃用)。 单一作用聚合 提供了对常见聚合过程的简单访问,操作都从单个集合聚合文…

网络笔记大全(超详细)

目录 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 封装和解封装 应用层 传输层 网络层 数据链路层 物理层 PDU --- 协议数据单元应用层 --- 报文 传输层 --- 段 网络层 --- 包 数据链路层 --- 帧 物理层 --- 比特流 Sof --- 帧首…

日本25年来首次干预以支撑日元汇率

日本周四自 1998 年以来首次干预外汇市场,以支撑暴跌的日元,此前日本央行决定维持超低利率,这一决定已对日元造成冲击。 KlipC 风险经理 Philip Nucci 周五表示:“他们(在外汇市场)采取了果断行动&#xff…

pytorch神经网络入门(三)

一、建立简单的卷积神经网络 import torch from torch import nnclass ConvNet(nn.Module):def __init__(self):super(ConvNet, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(1, 16, 3, 1, 1),nn.ReLU(),nn.AvgPool2d(2, 2))self.conv2 nn.Sequential(nn.Conv2d(16,…