【问题标题】:Unable to read Excel using Apache POI无法使用 Apache POI 读取 Excel
【发布时间】:2022-02-11 18:18:48
【问题描述】:

我正在使用 Apache POI 读取 excel,但它一直为 XSSFWorkbook 类定义发现错误给出错误。我使用了不同版本的 Apache-poi jar 库(即 4.1、4.0 和 3.12),它们似乎都没有修复这个错误。 这是当前导入的库的屏幕截图 enter image description here 代码里面有什么问题?

try {   
        File fileSrc = new File("C://Eclipse-Workspace//TestData//TestDataSet.xlsx");
            FileInputStream fis = new FileInputStream(fileSrc); 
            XSSFWorkbook workbook = new XSSFWorkbook(fis);
            XSSFSheet sheet = workbook.getSheetAt(0);
        XSSFCell cellData = sheet.getRow(rowNo).getCell(colNo);
workbook.close();
return cellData.toString();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

显示错误:

 java.lang.NoClassDefFoundError: 
    org/apache/poi/ss/usermodel/WorkbookFactory
    at Utilities.DataAccessorExcel.excelReader(DataAccessorExcel.java:33)
    at TestCases.LoginTest.verifyLogin(LoginTest.java:66)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
    Method)
    atjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMe 
    thodAccessorImpl.java:62)
    atjava.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Dele 
    gatingMethodAccessorImpl.java:43)at 
    java.base/java.lang.reflect.Method.invoke(Method.java:567)

【问题讨论】:

    标签: java excel apache-poi


    【解决方案1】:

    你必须包含 poi jar 文件。它的版本将是 4.1.0。如果您使用的是 Maven pom.xml,请包含以下依赖项。

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

    如果您不使用 Maven,请从以下位置下载 jar 文件。

    http://central.maven.org/maven2/org/apache/poi/poi/4.1.0/poi-4.1.0.jar

    http://central.maven.org/maven2/org/apache/poi/poi-ooxml/4.1.0/poi-ooxml-4.1.0.jar

    使用 Apache POI 读取 excel 文件,如果您不想使用 Maven,则需要以下 jar 文件。

    1. poi-ooxml-4.1.0.jar
    2. poi-ooxml-schemas-4.1.0.jar
    3. xmlbeans-3.1.0.jar
    4. commons-compress-1.18.jar
    5. curvesapi-1.06.jar
    6. poi-4.1.0.jar
    7. commons-codec-1.12.jar
    8. commons-collections4-4.3.jar
    9. commons-math3-3.6.1.jar

    我在下面提供了一个关于如何使用的简短代码sn-p。

    FileInputStream file =
            new FileInputStream(
                new File(
                    "testdata\\TestData_01.xlsx"));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.iterator();
    
        while (rowIterator.hasNext()) {
          Row row = rowIterator.next();
          Cell cell0 = row.getCell(0);
          if (cell0 != null) {
            System.out.println("First Column Data : "+cell0.getStringCellValue());
          }
          Cell cell1 = row.getCell(1);
          if (cell1 != null) System.out.println("Second Column Data : "+cell1.getStringCellValue());
    
    
        }
    

    【讨论】:

    • 它仍然不起作用,将所有现有的jar文件替换为上面提到的那些。另外,我没有使用maven来构建,它只是来自eclipse。我正在从测试用例(调用方法)中的 excel 中读取数据,即运行 testng.xml。它给出了相同的失败异常。
    • 如果你不使用maven,我告诉你要使用的jar文件列表。
    • 我已经上传了一张图片到这个问题,它显示了我之前使用的确切 jar 文件。
    • 我已经用所有必需的 jar 文件和版本详细信息更新了答案,请检查。
    • 好的,我按照更新后的答案再次尝试。它给出了同样的错误..看起来问题出在 XSSFWorkbook 上。因为它无法在 TestCases.LoginTest.verifyLogin(LoginTest.java:64) 的 Utilities.DataAccessorExcel.excelReader(DataAccessorExcel.java:36) 找到类“java.lang.NoClassDefFoundError: ) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) "
    【解决方案2】:

    我再次创建项目,并将 POI 库放在 ClassPath 下,但我发现 POI 库是作为 ModulePath 添加的,而不是在 ClassPath 下。无论如何,我以前试过这个,我开始创建一个新项目。并在 src 文件夹级别移动了 testng.xml。它按预期工作正常。

    【讨论】: