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

新手上路,请多包涵

我收到此错误:

org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的数据似乎在 Office 2007+ XML 中。您正在调用处理 OLE2 Office 文档的 POI 部分。您需要调用 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 无法解析为类型

原文由 Marco Dinatsoli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

根据 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"));

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

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

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

原文由 rgettman 发布,翻译遵循 CC BY-SA 3.0 许可协议

我将 XSSF 与 xlsx 文件一起使用,但是当我尝试处理使用密码加密/保护的文件时出现此错误。

删除密码后,一切都按预期进行。

原文由 cs_pupil 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题