当前位置: 首页 > 知识库问答 >
问题:

Apache Poi 3.13找不到用于打开XLSX文件的类

赵智勇
2023-03-14

我使用ApachePOI用Java读写Excels的文件,但在源代码中找不到WorkbookFactory或XSSFWorkbook来读取xlsx文件。

波姆。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>

我在apachepoi的changelog中找不到任何可能导致这种行为的信息。

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

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个答案

皇甫伟彦
2023-03-14

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

apachepoi的源代码

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

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

apachepoi的源代码

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

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

狄冠宇
2023-03-14

首先,我可以向您保证,WorkbookFactoryXSSFWorkbook类包含在POI-OOXML 3.13 JAR中,正如POI站点上记录的那样

$ 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文件,它需要更改。嗯,为了这个还有其他一些问题。。。如果你有文件,不要使用输入流

您的代码应该更像:

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依赖于POIooXMLjar,您就会自动获得所需的所有其他依赖项

 类似资料:
  • 我试图将openFiles()方法的内脏移到actionPerformed()方法中的相应位置,但仍然没有起作用。但是,在另一个人用于不同目的的代码中,showOpenDialog()方法在从actionPerformed方法内部调用的方法中工作。代码如下: 谢谢你的帮助。

  • 问题内容: 我经常看到类似于 文件名何时会被该代码关闭? 写会更好吗 问题答案: 超出范围时将关闭。那通常是方法的结束。 是的,最好使用。 一旦有了文件对象,就可以通过调用该对象的方法来执行所有文件I / O。[…]处理完文件后,应该通过在对象上调用方法来结束与文件的连接: 在简短的脚本中,人们通常会省略此步骤,因为在垃圾回收期间回收文件对象时,Python会自动关闭文件(这在主流Python中意

  • 我正试图用reactJS下载一个xlsx文件,但当我在下载后试图打开我的文件时,我收到了这条消息: “Excel无法打开文件‘file.xlsx’,因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。” 这是前端代码: 为什么我得到这个错误?请谁来帮帮我,我被困在这个3周 [编辑1] 我尝试下载的文件是在后端构建的,基本上我获取数据库上的值并使用Apache po

  • 我一直在开发一个android应用程序,在这个应用程序中,我必须打开.xls和.xlsx文件以便进一步实现。在.xls的情况下,一切工作正常,但当我尝试打开.xls x文件时,它给了我异常。下面是我的代码,请帮助我解决这些异常 我正在使用的JAR: null

  • 问题内容: 如何找到文件所在的位置? 我正在从Amazon Web Services EC2(弹性计算云)运行Ubuntu Linux服务器,但找不到我的Apache配置。 问题答案: 获取运行Apache的路径 将参数附加到路径 参考:http : //commanigy.com/blog/2011/6/8/finding-apache-configuration-file-httpd-conf

  • 原本注释是要用的,但只要一打包就开始报错: Could not open requirements file: [Errno 2] No such file or directory: './requirements.txt' 报错很明确就是文件找不到,不过,文件是存在的,前面copy进去,为了确保文件存在: 如下强制修改成这样,用ls查看,文件存在 用一个相似结构的项目的dockerfile 结