当前位置: 首页 > 知识库问答 >
问题:

使用apache poi读取excel xlsx文件时发生NoSuchMethodError(初始化失败

何安宜
2023-03-14

我尝试应用Apache POI,但失败了。我一直在四处寻找解决办法,但还是解决不了问题。不确定是java版本不兼容还是缺少jar文件。我需要专业人士的指导。

system.out之后的当前版本:1.6.0system.out.println(Runtime.Class.GetPackage().GetImplementationVersion());

添加的外部Jar文件:
-dom4j-1.6.1.Jar
-log4j-1.2.17.Jar
-junit-4.11.Jar
-poi-3.11-20141211.Jar
-poi-ooxml-3.11-20141211.Jar
-poi-ooxml-schemas-3.11-20141211.Jar
-xmlbeans-2.6.0.Jar

//jsp is my front end system

<jsp:useBean id="ReadXLSXFile" scope="page" class="com.home.file.ReadXLSXFile" />
<script>
    if(sType.equals("Y"))
    {
      ReadXLSXFile.main(null);
    }
</script>
package com.home.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadXLSXFile {

public static void main(String[] args) {

    try {
        File excel = new File("C:/Banklist.xlsx");
        FileInputStream fis = new FileInputStream(excel);
        XSSFWorkbook book = new XSSFWorkbook(fis);
        XSSFSheet sheet = book.getSheetAt(0);

        Iterator<Row> itr = sheet.iterator();

        // Iterating over Excel file in Java
        while (itr.hasNext()) {
            Row row = itr.next();

            // Iterating over each column of Excel file
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {

                Cell cell = cellIterator.next();

                switch (cell.getCellType()) {
                case Cell.CELL_TYPE_STRING:
                    System.err.print(cell.getStringCellValue() + "\t");
                    break;
                case Cell.CELL_TYPE_NUMERIC:
                    System.err.print(cell.getNumericCellValue() + "\t");
                    break;
                case Cell.CELL_TYPE_BOOLEAN:
                    System.err.print(cell.getBooleanCellValue() + "\t");
                    break;
                default:

                }
            }
            System.err.println("");
        }

    } catch (FileNotFoundException fe) {
        fe.printStackTrace();
    } catch (IOException ie) {
        ie.printStackTrace();
    }
}
}

Eclipse控制台结果:

Caused by: java.lang.NoClassDefFoundError: org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller (initialization failure)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161)
at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:141)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:87)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:272)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:258)
at com.rexit.easc.ReadXLSXFile.main(ReadXLSXFile.java:26)
at com.ibm._jsp._pop_5F_cnFW_5F_nstbl._jspService(_pop_5F_cnFW_5F_nstbl.java:500)

P/S:这个问题和这个线程很相似,但我还是想不通。这里

共有1个答案

锺英卫
2023-03-14

poi-3.11-20141211.jar中缺少org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller。
首先,您可以检查ZipPackagePropertiesMarshaller类是否在此JAR中。
如果没有,则可能是您的POI-3.11-20141211.jar无效或ZipPackagePropertiesMarshaller不支持POI-3.11-20141211.jar。

I would recommend you to change poi-ooxml-3.11-20141211.jar to poi-ooxml-3.9-20121203.jar.
 类似资料:
  • 我正在尝试为我的代码做一个简单的csv读取,它一直工作到我今晚尝试Mac。目前是10点15分。3、卡塔琳娜。这是我的代码: 它给我的错误是:OSError:从文件初始化失败。 我尝试了多种不同的选项来读取这个csv,包括 但所有这些都给出了类似的错误。我确信有一个简单的答案,但是我还没有找到。我在终端上尝试了 sudo chown username: group filename 命令,并通过我的

  • 所以我最近在我的win10 PC上安装了eclipse,并创建了一个公共类。代码如下: 接下来,显示了一个错误: 然后,我删除了info.java文件,并显示以下错误: 我能做些什么来解决这个问题?

  • 我正在使用和来备份。在执行makefile时,tar命令显示。在这种情况下, < li >当警告出现时,tar包正常 < li >但它会停止tar命令以进行后续备份 < li >显示警告的文件实际上没有改变-出现警告真是奇怪 < li >显示警告的文件随机出现,我的意思是,每次我运行makefile时,显示警告的文件都是不同的 < Li > < code >-ignore-failed-read

  • 问题内容: 我想这是某种依赖性问题,所以这是我的树: 从我发现的情况来看,Spring 4.1.1应该可以与javax.servlet 3.1.0一起使用,但是 我 在调用response.getStatus( ) 时遇到了 java.lang.NoSuchMethodError:javax.servlet.http.HttpServletResponse.getStatus() )放在我的拦截器

  • 此外,我使用tomcat7-maven-plugin运行tomcat。 这是密码。 web.xml

  • 问题内容: 静态字段何时初始化?如果我从不实例化一个类,而是访问一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法是否在那个瞬间被调用(按顺序)? 如果我调用静态方法怎么办?它也运行所有静态块吗?之前的方法? 问题答案: 类的静态初始化通常在以下事件之一首次发生之前立即发生: 创建该类的实例, 该类的静态方法被调用, 分配了该类的静态字段, 使用了非恒定静态字段,或者 对于顶级类,