You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取.xlsx文件时POIXMLTypeLoader类初始化失败问题求助

关于POI读取xlsx时Could not initialize class org.apache.poi.ooxml.POIXMLTypeLoader的问题解决

问题描述

我正在编写一个读取.xlsx文件的简单Java程序,代码如下:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

private String TestWorkbook(File[] excelFiles) {
    String returnString = null;

    List<String> numbers = new ArrayList<>();

    for (File file : excelFiles) {
        try (FileInputStream fis = new FileInputStream(file);
             XSSFWorkbook workbook = new XSSFWorkbook(fis)) {
            Sheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
        
            if (rowIterator.hasNext()) {
                rowIterator.next();
            }
           
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Cell cell = row.getCell(0);
                if (cell != null && cell.getCellType() == CellType.STRING) {
                    numbers.add(cell.getStringCellValue());
                }
            }

            for (String number: numbers ) {
                System.out.println("number= " + number);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return returnString = "OK";
}

引入的依赖库版本:

  • poi 5.2.5
  • poi-ooxml 5.2.5
  • poi-ooxml-lite 5.2.5

运行时出现错误:Could not initialize class org.apache.poi.ooxml.POIXMLTypeLoader,请问是代码存在问题还是缺少必要依赖?

问题原因及解决办法

这个错误不是代码问题,核心原因是依赖冲突或缺失,尤其是POI OOXML相关的XML解析依赖未正确引入。

具体解决步骤:

  1. 移除互斥依赖:poi-ooxml和poi-ooxml-lite是互斥的——poi-ooxml-lite是轻量版本,不含完整XML解析依赖,poi-ooxml是完整版本。保留其中一个即可,推荐选poi-ooxml(适配更多场景)。
  2. 确保依赖完整性:POI 5.x版本需要完整的依赖链,如果你用Maven,正确的依赖配置应该是:
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

Gradle配置则是:

implementation 'org.apache.poi:poi:5.2.5'
implementation 'org.apache.poi:poi-ooxml:5.2.5'
  1. 清理缓存并重构建:删除本地仓库中已下载的POI相关依赖,再执行mvn clean install或gradle clean build,避免缓存的损坏依赖导致问题。

代码小优化建议

你的代码逻辑没问题,可以做两点小调整:

  • 用CellUtil.getCell(row, 0)替代row.getCell(0),空指针处理更简洁;
  • 把打印numbers的循环移到外层for循环外面,避免多文件场景下重复打印。

内容的提问来源于stack exchange,提问作者Garinda Burnama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:33:13