当前位置: 首页 > 面试题库 >

Java POI提供的数据似乎在Office 2007+ XML中

万铭
2023-03-14
问题内容

我收到此错误:

org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的数据似乎在Office 2007+
XML中。您正在调用POI中与OLE2 Office文档有关的部分。您需要调用POI的其他部分来处理此数据(例如XSSF而不是HSSF)

我读了throw
Google,发现我需要使用XSSF而不是HSSF,因为我的Excel文件是xlsx,但是正如您在我的maven中看到的那样,我已经在使用xlsx。请问我哪里出问题了?

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.13-beta1</version>
    </dependency>

使异常的代码是:

POIFSFileSystem fs;

            fs = new POIFSFileSystem(new FileInputStream(getFilePath()));

我的新代码

public void getBColum() {
    try {
        OPCPackage fs;

        fs = new OPCPackage.open(new File(getFilePath()));

        XSSFWorkbook wb = new XSSFWorkbook(fs);
        XSSFSheet sheet = wb.getSheet("Master column name - Used Car");
        XSSFRow row;
        CellReference cr = new CellReference("A1");
        row = sheet.getRow(cr.getCol());
        System.out.println(row.getCell(3));
    } catch (FileNotFoundException e) {
        if (logger.isDebugEnabled()) {
            logger.debug("How can this error be possible? we should have already thrown an exception in the construction");
        }
    } catch (IOException e) {
        logger.error(String.format("Exception in reading the file: %s",
                e.getMessage()));
    }
}

我有一个编译错误new oPCPackage.open是:

OPCPackage.open无法解析为一种类型


问题答案:

根据Apache POI快速指南,POIFSFileSystem(或类似地,NPOIFSFileSystem)仅与.xls(Excel版本至2003年)文档一起使用。

.xlsx文档(Excel 2007+)的等效项是OPCPackage

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));

您可以XSSFWorkbook从创建一个OPCPackage

XSSFWorkbook wb = new XSSFWorkbook(pkg);

或者,您可以直接创建它:

XSSFWorkbook wb = new XSSFWorkbook(new File("file.xlsx"));

通常,最好使用a File而不是创建工作簿InputStream以节省内存。

另外,如果您想要的代码不关心它是.xls还是.xlsx:

// or "file.xlsx"
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));


 类似资料:
  • OpcPackage.Open无法解析为类型

  • 第一次在Windows 7x64上启动IntelliJ IDEA Community Edition 14.0.2时,我在试图导入示例libGDX gradle配置时收到以下错误: IntelliJ14提供的javaHome似乎无效 IDE正在中查找java运行时,但是这些文件存在于这个目录之外的子目录中:。 我的解决方案是将的内容复制到上一级,这解决了问题--但感觉不是正确的做法。 这被记录为一

  • 问题内容: 我正在尝试使用设置为 我不明白为什么intellij在其安装目录中寻找JDK。 在intellij中: 问题答案: IDEA有2个版本:32位和64位。 您的Java是64位版本,因此您必须运行64位版本的IDEA 。 否则,您可以提供32位JDK或通过IDEA设置来调整行为 https://intellij-support.jetbrains.com/hc/en- us/articl

  • 类似于: -Intellij 14提供的javaHome似乎无效 -Android Studio提供的javaHome不是有效文件夹 但是,我正在尝试使用我的变量,该变量设置为 我不明白为什么intellij在其安装目录中寻找JDK。 在Intellij中:

  • 这真的是我第一次尝试开始开发Android。我正在使用IntelliJ IDEA 15.0.4。我尝试过为我的问题寻找解决方案,但我似乎找不到我正在处理的确切问题。 我一直得到以下错误。 错误:提供的 javaHome 似乎无效。我找不到java可执行文件。尝试的位置: C:\Program Files (x86)\Android\android-sdk\bin\java.exe 我真的不知道从哪

  • 防止在ASP.NET MVC中对使用属性的特定操作进行缓存 ASP.NET MVC如何禁用自动缓存选项?