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

2024-01-07

我想用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 文件 (.xlsx) 时:

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

您知道为什么 Excel Worksheet 和这种格式具有相同的文件扩展名吗?

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

我接受文件作为输入,然后根据扩展名处理它们。没有try-catch我怎么知道?

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

I guess you could code something to read the file and look for the signature for "strict OOXML" format1 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.


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

org.apache.poi.POIXMLException 目前不支持严格的 OOXML,请参阅 bug #57699 的相关文章

随机推荐

  • 雄猫并没有停止。我该如何调试这个?

    我有一个Tomcat 7在我启动的 Linux 中运行 CATALINA HOME bin startup sh并通过关闭 CATALINA HOME bin shutdown sh from etc init d 除了 1 个问题外 一切
  • Qt 中的阿拉伯语与 QString

    我想向我的 Qt 应用程序添加阿拉伯语标题 但没有成功 这是我的代码 include mainwindow h include
  • Java 1.6 中的枚举类主体功能

    enum CoffeeSize BIG 8 HUGE 10 OVERWHELMING 16 public String getLidCode return A private int ounces public int getOunces
  • 使用 stackdriver CLI 查找时间戳之间的日志

    我需要使用 stackdriver CLI 查找两个时间戳之间的日志 我使用了下面的命令 gcloud beta logging read timestamp gt 2017 02 19T00 00 00Z AND timestamp lt
  • 中止多文件上传 AJAX 请求

    我试图用进度条中止多个文件上传 显示进程的状态 我想要实现的是在单击中止按钮时完全中止多个文件上传 停止进度条并清除在最初触发的多个文件上传过程中可能已上传的每个文件 下面是我的代码 var AJAX ajax xhr function v
  • 如何让 python 脚本安全退出?

    这是我有一个必须输入的密码的情况 如果输入错误 脚本将无法继续并自行退出 但我怎样才能告诉脚本安全地退出呢 I tried sys exit 但这会产生回溯错误 并且看起来不是一个非常干净的退出方法 实际上 sys exit 只会抛出一个S
  • AWS lambda无服务器网站会话维护

    我使用 Node js 作为后端开发了一个网站 最近我正在尝试将其变成无服务器并部署到 lambda 我将重写大部分代码 但只是还没弄清楚如何在用户登录后维护会话 我使用的是 express session 模块 会话数据全部记录在数据库中
  • 启动ejb bean不工作

    我正在尝试使用启动 ejb 在启动时做一些事情 但我的豆子从来没有被调用过 这是我的豆子 import javax annotation PostConstruct import javax ejb Startup import javax
  • Django cookies 在电子邮件地址周围放置双引号

    在我的登录脚本中 它为用户登录其电子邮件地址和密码创建一个 cookie 我遇到的问题是 当设置电子邮件地址时 它将整个电子邮件地址放在双引号之间 我怎样才能让它不呢 if request method POST post request
  • iOS9 self.canDisplayBannerAds = true 不显示任何广告 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 非常简单的iAd代码 import UIKit import iAd class ViewController UIViewCon
  • Linux 上的 SAFEARRAY

    我在 Linux 上使用一个专有库 它使用SAFEARRAY输入回调函数 HRESULT Write SAFEARRAY Data SAFEARRAY在头文件中定义为typedef void SAFEARRAY 我必须定义一个回调函数来获取
  • ASP.NET MVC Html.Editor 将模型传递给编辑器模板

    我有一个名为 Address cshtml 的编辑器模板 其模型定义为 model Acme Models Address 在视图中 我想调用编辑器模板并传递相同类型的局部变量 并定义它将用于变量的名称 我尝试了很多方法 包括 Html E
  • 如何在Windows 10上构建winium驱动服务?

    我正在使用以下类代码通过 WiniumDriver 启动计算器 在创建 WiniumDriver 实例之前 我将启动一个 winium 驱动程序服务 import java io File import java io IOExceptio
  • java中的返回值语法

    我不太确定这个方法的作用 或者更好的是我不确定 是什么意思 有人可以帮我理解吗 private int guess return isTrue A isFalse B neither C D 这是嵌套的情况三元运算符 http en wik
  • SQL查询获取最近3个月的数据

    如何获取今天的日期并将其转换为01 mm yyyy格式化并从表中获取 3 个月前交货月份的数据 表已包含交割月份01 mm yyyy SELECT FROM TABLE NAME WHERE Date Column gt DATEADD M
  • 使用 jQuery 获取整个开始标签

    假设 HTML 是 div class someclass more divs div 如何使用 ID 获取 HTML 中显示的整个开始标记及其属性 但不是结束标记 例如 page tag 然后会返回 div class someclass
  • Apache Airflow 任务超时

    所以我有一个任务的测试 dag 这是一个简单的 ETL 尝试从 mssql 数据库中提取数据并将它们加载到 postgres 数据库 所以它的工作方式是按日期选择并插入过去 360 天的 postgres 数据库 但任务在 10 天左右后
  • 如何在Python中找到两个单词之间的最短依赖路径?

    我尝试在给定的依赖树中找到 Python 中两个单词之间的依赖路径 对于句子 流行文化中的机器人提醒我们人类的伟大之处 不受约束的人类机构 我使用了 practnlptools https github com biplab iitb pr
  • Scikit - SVM 的 3D 特征数组

    我正在尝试在 scikit 中训练 SVM 我正在遵循该示例并尝试将其调整为我的 3d 特征向量 我尝试了页面中的示例http scikit learn org stable modules svm html http scikit lea
  • org.apache.poi.POIXMLException 目前不支持严格的 OOXML,请参阅 bug #57699

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