Apache Poi 3.13找不到类来打开XLSX文件

我正在使用Apache POI来读取和写入Java的Excels文件,但是我无法在源文件中findWorkbookFactoryXSSFWorkbook来读取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> 

我无法find可能导致这种行为的Apache poi更新日志中的任何信息。

编辑 :在这里我的实现(只是一个简单的方法)

 public static HSSFSheet getXLSSheet(String fileName, int sheetIndex) throws IOException { InputStream inputStream = new FileInputStream(fileName); HSSFWorkbook workbook = new HSSFWorkbook(inputStream); return workbook.getSheetAt(sheetIndex); } 

我试图打开一个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) 

提前致谢。

首先,我可以向您保证,POI-OOXML 3.13jar子中包含WorkbookFactoryXSSFWorkbook类,如POI网站上所logging

 $ 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 

但是,由于您发布的exception很清楚,您的代码将永远不会用于XLSX文件,因此需要更改。 那么,对于这个和其他一些问题呢…例如, 如果你有一个文件,不要使用InputStream

你的代码应该更像是:

 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); } 

这将适用于xlsxlsx文件,并将比使用inputstream更低的内存。 只要你告诉maven依赖poi-ooxml jar,你会得到你需要的所有其他依赖

XSSFWorkbook出现在Apache POI的3.11版本中。

apache POI的源代码

尝试使用这个版本的Apache poi。

此外,它仍然存在于后备箱:

apache POI的源代码

我相信这个问题是与你maven本地存储。 尝试从Maven本地存储库中删除poi folederes并重新下载依赖项。

另外,请尽量不要忘记将所有从HSSFWorkbook调用到XSSFWorkbook ,因为XLSX文件只能通过XSSFWorkbook打开。