本文介绍了org.apache.poi.POIXMLException目前不支持严格的OOXML,请参见错误#57699的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用java解析Excel文件,所以我使用apache poi库,这里是maven依赖项:

I'd like to parse an Excel file with java, so I'm using apache poi libraries, here you are the maven dependencies:

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

这将包括一系列依赖项:

This will include a series of dependencies:

poi-ooxml-3.14.jar
poi-3.14.jar
commons-codec-1.10.jar
poi-ooxml-schemas-3.14.jar
xmlbeans-2.6.0.jar
stax-api-1.0.1.jar
curvesapi-1.03.jar

当我尝试使用以下代码读取Office 365 Excel文件(.xslx)时:

When I try to read an Office 365 Excel file (.xslx) with this code:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelConverter {

    public static void main(String[] args) throws Exception{
        String excelFilePath = "C:/temp/Book1.xlsx";
        File myFile = new File(excelFilePath);
        System.out.println("File exists: " + myFile.exists());
        FileInputStream inputStream = new FileInputStream(myFile);

        Workbook workbook = new XSSFWorkbook(inputStream);
   }
}

我收到以下控制台消息:

I got the following console message:

File exists: true
Exception in thread "main" org.apache.poi.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699
    at org.apache.poi.POIXMLDocumentPart.getPartFromOPCPackage(POIXMLDocumentPart.java:679)
    at org.apache.poi.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:122)
    at org.apache.poi.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:115)
    at org.apache.poi.POIXMLDocument.<init>(POIXMLDocument.java:61)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:273)
    at org.myCompany.excel.ExcelConverter.main(ExcelConverter.java:25)

您知道该怎么做才能解决此问题?预先感谢

Do you know what can I do to solve the issue?Thanks in advance

推荐答案

除了不要以严格的OOXML"格式保存电子表格"之外,目前似乎没有其他简单的解决方案.

There doesn't currently appear to be any simple solution other than "Don't save your spreadsheet in "strict OOXML" format."

例如,在Excel中使用

For example, in Excel use

Save As --> "Excel Workbook (.xlsx)"

代替

Save As --> "Strict Open XML Spreadsheet (.xlsx)"


那是只有微软才能回答的问题.但是我想工程师(或他们的管理人员)没有预期,应用软件必须对此加以区分.

That would be something that only Microsoft can answer. But I guess that the engineers (or their management) did not anticipate that it would be necessary for application software to make the distinction.

没有什么可以让您使用当前POI处理文档的.

There is nothing that will let you process the document with current generation POI.

我想您可以编写一些代码来读取文件,并在将文件传递给POI之前查找严格的OOXML"格式的签名,但这没有什么意义.您将只写一堆额外的代码,以便可以用其他逻辑替换try-catch.

I guess you could code something to read the file and look for the signature for "strict OOXML" format before passing the file to POI, but there's not much point. You would be writing a stack of extra code just so that you can replace the try-catch with other logic.

这篇关于org.apache.poi.POIXMLException目前不支持严格的OOXML,请参见错误#57699的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 15:43
查看更多