首页 文章

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

提问于
浏览
6

我使用apache POI用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>

我在apache poi的更改日志中找不到任何可能导致此行为的信息 .

Edit :这是我的实现(暂时只是一个简单的方法)

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

    首先,我可以向您保证 WorkbookFactoryXSSFWorkbook 类包含在POI-OOXML 3.13 jar 中,如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,你就会自动获得所需的所有其他依赖项

  • 3

    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 打开 .

相关问题