java.lang.NoSuchMethodError : org. apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;

标签 java excel apache-poi

我需要一些关于错误的帮助。我有一个包含以下 jar 文件的 javafx 项目

  • fontawesome-fx-8.1.jar
  • sqlite-jdbc-3.8.10.1.jar
  • controlsfx-8.40.11.jar
  • sqljdbc42.jar
  • jfoenix-1.0.0.jar
  • POI-3.17.jar
  • poi-examples-3.17.jar
  • poi-excelant-3.17.jar
  • poi-ooxml-3.17.jar
  • poi-ooxml-schemas-3.17.jar
  • poi-scratchpad-3.17.jar

我需要的是向其中导入一些 excel 数据。我已经导入了上面的jar文件

但不幸的是,当我尝试运行该项目时出现错误:

Caused by: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;
at app.controllers.ContentAreaController.nextActionReport(ContentAreaController.java:734)
... 62 more

我试过谷歌搜索,建议我更改 poi lib 文件的版本,但没有运气。任何人都可以建议我解决方案,因为我已经在这个问题上花费了足够的时间

最佳答案

将一些评论提升为答案 - 您的类路径中有较旧的 Apache POI jar。根据 this POI FAQ - mixing POI jars between versions is not supported

您需要做的是只是删除旧的 POI jar 。我说只是,因为你不知道你有它们......幸运的是,if you follow the code in this Apache POI FAQ it'll help you find where the older jars are coming from .在有问题的系统上运行时,像这样的东西应该打印出旧 jar 的名称和位置:

ClassLoader classloader =
     org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
         "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("POI Core came from " + path);

classloader = org.apache.poi.POIXMLDocument.class.getClassLoader();
res = classloader.getResource("org/apache/poi/POIXMLDocument.class");
path = res.getPath();

System.out.println("POI OOXML came from " + path);

classloader = org.apache.poi.hslf.usermodel.HSLFSlideShow.class.getClassLoader();
res = classloader.getResource("org/apache/poi/hslf/usermodel/HSLFSlideShow.class");
path = res.getPath();
System.out.println("POI Scratchpad came from " + path);

只需找出您不想要的旧 jar ,将其移除,然后您就可以设置了!

关于java.lang.NoSuchMethodError : org. apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469433/

相关文章:

excel - 如何在Excel "vlookup"中搜索多列并从同一行中的另一列返回值?

java - 在 JTextPane 上显示 Excel 工作表的格式化单元格值

java - 标题读取 xls 文件无效

java - 写入长值以在 apache POI 中表现出色

java - 在滚动 Pane 中将滚动条设置为 "always on"

java - 构造一个返回由输入决定的原始数据类型的 Java 方法?

vba - 锁定或卡住 VBA 代码以防止编辑

java - 内部类未包含在 jar 文件中

java - 使用 SAX 从行集架构中获取列名

excel - 某些工作表上出现运行时错误 '1004' : Method 'Range' of object 'Global' failed,,但我的代码能够在大多数其他工作表上运行?