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

2022-09-01 18:14:50

我收到此错误:

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

我读了扔谷歌,我发现我需要使用XSSF而不是HSSF,因为我的Excel文件是xlsx,但正如你在我的专家中看到的,我已经在使用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 无法解析为某个类型


答案 1

根据Apache POI快速指南,(或类似地)仅用于.xls(Excel版本至2003)文档。POIFSFileSystemNPOIFSFileSystem

.xlsx文档 (Excel 2007+) 的等效值为 。OPCPackage

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

您可以从以下位置创建:XSSFWorkbookOPCPackage

XSSFWorkbook wb = new XSSFWorkbook(pkg);

或者您可以直接创建它:

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

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

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

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

答案 2

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

删除密码后,一切都按预期工作。


推荐