gpt4 book ai didi

java - org.apache.poi.POIXMLException 目前不支持严格的 OOXML,请参阅 bug #57699

转载 作者:行者123 更新时间:2023-12-03 00:13:28 28 4
gpt4 key购买 nike

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

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

这将包括一系列依赖项:

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) 时:

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

我收到以下控制台消息:

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)

你知道我可以做什么来解决这个问题吗?提前致谢

最佳答案

除了“不要以“严格的 OOXML”格式保存电子表格”之外,目前似乎没有任何简单的解决方案。

例如,在 Excel 中使用

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

而不是

Save As --> "Strict Open XML Spreadsheet (.xlsx)" 
<小时/>

Do you know why Excel Worksheet and this format have the same file extension?

这个问题只有微软才能回答。但我猜工程师(或他们的管理层)并没有预期应用软件有必要做出区分。

I am accepting Files as input and then processing them based on the extension. How can I know without try-catch?

没有任何东西可以让您使用当前一代 POI 处理文档。

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

<小时/>

1 - 请参阅 https://www.loc.gov/preservation/digital/formats/fdd/fdd000395.shtml#sign

关于java - org.apache.poi.POIXMLException 目前不支持严格的 OOXML,请参阅 bug #57699,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com