簡體   English   中英

Java POI 提供的數據似乎在 Office 2007+ XML 中

[英]Java POI the supplied data appears to be in the 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 無法解析為類型

根據Apache POI Quick GuidePOIFSFileSystem (或類似的, NPOIFSFileSystem )僅用於 .xls(Excel 版本到 2003 年)文檔。

.xlsx 文檔(Excel 2007+)的等價物是OPCPackage

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

您可以從OPCPackage XSSFWorkbook

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

我將 XSSF 與 xlsx 文件一起使用,但是當我嘗試處理使用密碼加密/保護的文件時出現此錯誤。

刪除密碼后,一切都按預期進行。

實際上沒有 OPCPackage,我使用的是https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/3.5-beta5所以你必須:

import org.apache.poi.openxml4j.opc.Package;
....
Package fs = Package.open(new ByteArrayInputStream(container.getContent()));
            XSSFWorkbook wb = new XSSFWorkbook(fs);
            XSSFSheet sheet = wb.getSheetAt(0);
            XSSFRow row;
            XSSFCell cell;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM