Java Apache Poi 3.13 can';找不到打开XLSX文件的类

Java Apache Poi 3.13 can';找不到打开XLSX文件的类,java,excel,maven,apache-poi,Java,Excel,Maven,Apache Poi,我正在使用ApachePOI用Java读写Excels的文件,但我无法在源代码中找到WorkbookFactory或XSSFWorkbook来读取xlsx文件 pom.xml: <poi.version>3.13</poi.version> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId>

我正在使用ApachePOI用Java读写Excels的文件,但我无法在源代码中找到WorkbookFactoryXSSFWorkbook来读取xlsx文件

pom.xml

<poi.version>3.13</poi.version>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>
我试图打开一个XLSX文件,但由于找不到其他两个类(WorkbookFactory或XSSFWorkbook),我预计会出现如下错误:

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

提前感谢。

XSSF工作簿以3.11版本的Apache POI显示

尝试使用此版本的ApachePOI

此外,它仍然存在于行李箱中:

我相信问题出在maven本地存储上。尝试从maven本地存储库中删除poi文件夹并重新下载依赖项


另外,请不要忘记将所有调用从
HSSFWorkbook
更改为
XSSFWorkbook
,因为XLSX文件仅通过
XSSFWorkbook
打开。

首先,我可以向您保证
WorkbookFactory
XSSFWorkbook
类包含在POI-OOXML 3.13 JAR中,如下所示:

但是,正如您发布的例外说明的那样,您的代码永远不会适用于
XLSX
文件,它需要更改。嗯,为了这个还有其他一些问题。。。乙二醇

您的代码应该更像:

import java.io.File;
import org.apache.poi.ss.usermodel.*;

public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException {
   File file = new File(fileName);
   Workbook workbook = WorkbookFactory.create(file);
   return workbook.getSheetAt(sheetIndex);
}

这将适用于
xls
xlsx
文件,并且比使用输入流的内存更低。只要你告诉maven依赖于
POIooXML
jar,你就会自动得到你所需要的所有其他依赖项

我知道这是行不通的。但是感谢您发现它在3.13版本中。我发现IDE有一个错误,原因是没有加载依赖项。现在一切正常。我也改为文件而不是InputStream(但出于测试目的,我尝试了最快的方法)
$ unzip -l .m2/repository/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar | grep WorkbookFactory
  6041  2015-09-22 00:22   org/apache/poi/ss/usermodel/WorkbookFactory.class
import java.io.File;
import org.apache.poi.ss.usermodel.*;

public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException {
   File file = new File(fileName);
   Workbook workbook = WorkbookFactory.create(file);
   return workbook.getSheetAt(sheetIndex);
}