Apache Poi 3.13无法找到打开XLSX文件的类

时间:2015-11-13 12:52:32

标签: java excel maven apache-poi

我正在使用apache POI来读取和编写带有Java的Excels文件,但我无法在源代码中找到 WorkbookFactory XSSFWorkbook 来读取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>

我在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)

提前致谢。

2 个答案:

答案 0 :(得分:3)

首先,我可以向您保证,WorkbookFactoryXSSFWorkbook类包含在POI-OOXML 3.13罐中,如documented on the POI site

$ 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

但是,正如您发布的例外情况所表明的那样,您的代码永远不会适用于XLSX文件,它需要更改。那么,对于那个和其他一些问题......例如Don't use an InputStream if you have a File

您的代码应该更像是:

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文件都有效,并且比使用输入流的内存更低。只要你告诉maven依赖poi-ooxml jar,你就会获得你需要的所有其他依赖项

答案 1 :(得分:0)

XSSFWorkbook提供了3.11版本的Apache POI。

Source code of apache POI

尝试使用此版本的apache poi。

此外,它仍然存在于主干中:

Source code of apache POI

我认为问题在于maven本地存储。尝试从maven本地存储库中删除poi folederes并重新下载依赖项。

同时尝试不要忘记将所有来电从HSSFWorkbook更改为XSSFWorkbook,因为 XLSX 文件仅通过XSSFWorkbook打开。