com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/P

想实现excel文件内容读取到数据库中,而且excel是存在合并单元格这种情况的,便考虑借助EasyExcel来实现

前置操作

  • 因为要使用EasyExcel,所以在pom.xml中引入EasyExcel和poi相关依赖
<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
</dependencies>

<!-- 管理子项目中引用的依赖的版本 -->
    <dependencyManagement>
        <dependencies>
    <!--只是声明,没有导入-->
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.0.0</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.0.0</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

问题

运行代码时,发现报错如下

com.alibaba.excel.exception.ExcelAnalysisException:
java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

在这里插入图片描述

原因

这个异常表明在使用阿里巴巴的 EasyExcel 库时,发生了 ExcelAnalysisException,并且其中的原因是 java.lang.NoClassDefFoundError: org/apache/poi/P。这通常是因为缺少 Apache POI 库的相关依赖引起的。

  1. 因为之前项目的pom里引入过poi-ooxml版本是4.0.0,所以直接引了过来,实际应该看easyexcel依赖中的poi-ooxml版本。

  2. 点击easyexcel依赖可以看到poi-ooxml版本是3.17
    在这里插入图片描述

解决

要解决这个问题,需要确保项目中包含了 Apache POI 库的正确版本,正如上所述,我是从之前项目的pom里直接引入的,怀疑是poi-ooxml版本的问题

我的解决方法

修改poi-ooxml版本为easyexcel中的版本
如上原因,把poi-ooxml版本替换为3.17,再去运行项目,果然解决了

一般的解决步骤

添加 Apache POI 依赖

在项目中,确保已经添加了 Apache POI 的依赖。具体的配置方式取决于你使用的构建工具,比如 Maven 或 Gradle。

对于 Maven,在你的 pom.xml 文件中添加以下依赖:

<dependencies>
    <!-- 其他依赖项 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>你需要的版本号</version>
    </dependency>
</dependencies>

对于 Gradle,在你的 build.gradle 文件中添加以下依赖:

dependencies {
    // 其他依赖项
    implementation 'org.apache.poi:poi:你需要的版本号'
}

确保你选择的 Apache POI 版本与 EasyExcel 兼容

查看 EasyExcel 版本

确保你使用的 EasyExcel 版本与你添加的 Apache POI 版本兼容。
可以查看 EasyExcel 的文档或者官方说明,了解哪个版本与哪个版本的 Apache POI 最为匹配。

检查依赖冲突

有时候,项目中可能存在多个库引入了不同版本的 Apache POI,导致依赖冲突。你可以使用你的构建工具的命令来查看项目的依赖关系,以确定是否存在冲突。

对于 Maven,你可以运行以下命令:

mvn dependency:tree

对于 Gradle,你可以运行以下命令:

./gradlew dependencies

查看输出,检查是否有多个版本的 Apache POI 被引入


最后

  • 好看的灵魂千篇一律,有趣的鲲志一百六七!
  • 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 还有很多有趣的文章,欢迎小伙伴们前去点评
  • 如果有什么需要改进的地方还请大佬指出❌

在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
这个错误是由于缺少POI库的相关类文件引起的。根据引用\[1\]、\[2\]和\[3\]提供的信息,可以得出解决方案。首先,你需要确保你的项目中包含了POI库的正确版本。然后,你可以尝试以下解决方案之一: 1. 检查你的项目依赖是否正确配置。确保你已经添加了POI库的正确版本,并且没有冲突的依赖。 2. 如果你使用的是Maven,可以尝试清除本地仓库并重新下载依赖。你可以使用以下命令清除本地仓库: ``` mvn dependency:purge-local-repository ``` 3. 如果你使用的是Gradle,可以尝试清除Gradle缓存并重新构建项目。你可以使用以下命令清除Gradle缓存: ``` gradle clean build --refresh-dependencies ``` 4. 如果以上方法都没有解决问题,你可以尝试手动下载并添加缺失的POI库文件。你可以从POI官方网站下载所需的库文件,并将其添加到你的项目中。 请根据你的具体情况选择适合的解决方案,并确保按照正确的步骤进行操作。这样应该能够解决你遇到的错误。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/P](https://blog.csdn.net/m0_37482190/article/details/129987476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagic报错](https://blog.csdn.net/qq_52141790/article/details/124405993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲲志说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值