java.lang.NoSuchMethodError : org. apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V

标签 java apache-poi import-from-excel

我已经在我的类路径中包含了 dom4j-1-6.jar、poi 3.9 jar、poi ooxml schemas 3.9 jar、poi ooxml 3.9 jar、xmlbeans-2.3.0.jar。我使用了如下语法

InputStream ExcelFileToRead = new FileInputStream(relative+"/"+docName);
         XSSFWorkbook  wb_hssf  = new XSSFWorkbook(ExcelFileToRead);

我收到以下错误,

java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V
    at com.admin.upload_images.doPost(upload_images.java:1057)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)

最佳答案

有一个 Apache POI FAQ entry covering virtually this case ,你应该阅读。但基本上,在运行时,您并没有使用您编译的 POI jar。相反,您以某种方式使用了不同的版本。这可能是因为您部署了不同的 jar,也可能是因为您的运行时、容器或框架传送了其他 POI jar,或者其他一些错误。根据this POI FAQ所有 POI jar 也必须来自同一版本。

因此,您需要在 snippet from the FAQ 的帮助下在运行时检查您的类路径如果您无法发现问题所在,请删除不匹配的 POI jar,这样您就只有在编译时使用的那些。然后你的代码就可以工作了

但是...您的代码还存在一些其他问题!其一是当你有一个文件时你正在使用一个InputStream。这如explained in the Apache POI docs很糟糕,因为它使用了更多内存。将其更改为使用文件,例如使用此

Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));

其次,Apache POI 3.9现在有点老了,已经有a huge number of bug fixes since then了,因此您应该升级到最新版本(截至撰写本文时为 3.11 或 3.12 beta 1)

关于java.lang.NoSuchMethodError : org. apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165392/

相关文章:

java - 访问存储在对象中的实例变量

java - JOGL 中的 Hello World

java - 是否有同时支持 Microsoft office 和 Open Office 的 Java 库?

javascript - 我可以将 Excel 工作表中的数据导入到 Instruments UIAutomation 中吗?

java - 如果子类在重写方法中强化了先决条件,那么在程序中会发生什么情况?

java - 在 Thymeleaf 中使用 onClick 时如何将参数传递给 javascript 函数调用

java - 使用 Apache POI 识别 MS Excel 中的要点

java - SimpleDateFormat 无法解析的日期 : "9-Jul" when using parse method

asp.net - 从 Excel 导入 - 忽略非数字值

mysql - 通过 Rails 将 SQL 文件或 Excel 文件中的数据导入数据库