使用poi读取excel异常IOException: OPC Compliance error [M4.3]: Producers shall not create a document ele..._exception in thread "main" cn.hutool.poi.exception-程序员宅基地

技术标签: Java技术  

前言
  前一段时间,帮女朋友整理她们公司的破Excel文档,本着减少工作量的原则(居家好男人),帮忙写了个java main去读取整理Excel,到后来发现在读取到xlsx的excel报错,报错信息居然没看懂。。。
报错信息

Exception in thread "main" cn.hutool.poi.exceptions.POIException: IOException: OPC Compliance error [M4.3]: Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: <dcterms:created> and <dcterms:modified> Consumers shall consider a document element that violates this constraint to be an error.
	at cn.hutool.poi.excel.WorkbookUtil.createBook(WorkbookUtil.java:87)
	at cn.hutool.poi.excel.WorkbookUtil.createBook(WorkbookUtil.java:48)
	at cn.hutool.poi.excel.ExcelReader.<init>(ExcelReader.java:64)
	at cn.hutool.poi.excel.ExcelReader.<init>(ExcelReader.java:54)
	at cn.hutool.poi.excel.ExcelUtil.getReader(ExcelUtil.java:217)
	at cn.hutool.poi.excel.ExcelUtil.getReader(ExcelUtil.java:193)
	at com.ls.handler.option_excel.ExcelReaderExcel.readExcel(ExcelReaderExcel.java:53)
	at com.ls.handler.option_excel.ExcelReaderExcel.main(ExcelReaderExcel.java:123)
Caused by: java.io.IOException: OPC Compliance error [M4.3]: Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: <dcterms:created> and <dcterms:modified> Consumers shall consider a document element that violates this constraint to be an error.
	at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:351)
	at org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:314)
	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:302)
	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:271)
	at cn.hutool.poi.excel.WorkbookUtil.createBook(WorkbookUtil.java:85)
	... 7 more
Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: OPC Compliance error [M4.3]: Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: <dcterms:created> and <dcterms:modified> Consumers shall consider a document element that violates this constraint to be an error.
	at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.checkElementForOPCCompliance(PackagePropertiesUnmarshaller.java:259)
	at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.checkElementForOPCCompliance(PackagePropertiesUnmarshaller.java:291)
	at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.unmarshall(PackagePropertiesUnmarshaller.java:113)
	at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:741)
	at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274)
	at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:115)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:339)
	... 11 more

实现逻辑
   我的实现是,把所有的excel文件都放到一个文件夹里,去读取,里边有xls文件也有xlsx文件,xls文件是没问题的,但是xlsx文件会报这个错。
异常原因和解决
  为了发现异常,我再执行文件解析的时候,打印了一下文件名,发现一个问题
在这里插入图片描述

  可以清楚的看到“~$蔺一铭.xlsx”,读取的并不是一个正常的文件,这是一个类似于临时文件,而且是隐藏文件,以为找到了原因了,把contains ~的文件排除掉不就行了。
后续
  到这里我以为终于解决了这个问题,但是我后来轮循的时候发现,又出了这个异常!整个人有点崩溃,仔细排查了文件名,完全没问题,也不是临时文件,抱着试一试的把有问题的xlsx文件打开随便编辑一下再保存,重新读取,居然异常没有了…
  我只能说,POI虽然方便了我们读取、写入EXCEL,但是架不住跟EXCEL的兼容性还是不行,莫名其妙的出各种问题,希望以后可以更加强大吧…

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IM507/article/details/100561304

智能推荐

超全golang面试题合集和答案+golang学习指南+golang知识图谱_goland面试题-程序员宅基地

文章浏览阅读6.8k次,点赞3次,收藏68次。https://blog.51cto.com/u_15102959/2637222_goland面试题

Python实现自动挂机脚本(基础篇)_我是农场主自动挂机脚本-程序员宅基地

文章浏览阅读8.4w次,点赞67次,收藏608次。不知不觉肝阴阳师也快一年了,对这游戏真是又爱又恨,最近刚刚发布了PC版,突然很想尝试着写个脚本挂机,话不多说进入正题。简单的鼠标操作游戏挂机脚本,无非就是自动移动鼠标,自动点击,进行重复操作,所以,第一步就是如何控制鼠标_我是农场主自动挂机脚本

java 筛法_AcWing 874. 筛法求欧拉函数JAVA-程序员宅基地

文章浏览阅读135次。时间复杂度O(n)java代码import java.util.*;class Main{static int n = 0, N = 1000010;static int[] phi = new int[N];//存储数字n的质数的个数static int[] primes = new int[N];//存储质数的下标对应的质数static int cnt = 0;//存储质数的下标static ..._java 欧拉筛

时间管理类APP分析:拇指时间-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏19次。就目前市场来看,时间管理类应用,大致分为划分为:行程管理、任务管理和备忘管理三种类型。市场上,这三种类型的产品百花齐放,做细分市场的,做垂直人群的不断在增加。今天,我们来看看“日历”,这个可以囊括行程管理、任务管理和备忘管理的工具。数据显示,从07年到15年的,人们对PC日历的需求越来越大,为了方便用户,日历APP在此基础上开始衍生。 APP因手机、平板等电子化设备携带方便,在各使用场景中占有优势_时间管理类app用户调研

MySQL-程序员宅基地

文章浏览阅读371次。1、初识MySQLjavaEE:企业级java开发 Webweb分为 :前端(页面:展示(数据库里的数据))后台 (连接点:链接数据库JDBC,链接前端(做控制,控制试图跳转,和给前端传递数据))数据库 (存数据,txt,Excel,world)只会写代码的码农是基本的,学好数据库; 基本混饭吃学习操作系统,学习数据结构与算法! 当一个不错的程序员离散数学,数字电路,网站体系结构,编译原理。+实战经验 = 优秀的程序员1.1、为什么学习数据库岗位需求现在的世界,大数据时代,

Bug的生命周期状态流程图_bug生命周期流程图-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏8次。bug的生命周期BUG的生命周期,就是一个BUG被发现到这个BUG被关闭的过程。生命周期中缺陷状态:新建-->指派-->已解决-->待验-->关闭发现BUG-->提交BUG-->指派BUG-->研发确认BUG-->研发去修复BUG-->回归验证BUG-->是否通过验证-->关闭BUG如果待验的BUG在验证时没有解决好,我们需要重新打开--指派—已解决—待验,循环这个过程。中间其他状态:拒绝、延期等_bug生命周期流程图

随便推点

lenovo 邵阳E42-80 Ubuntu14.04.5 wireless 驱动安装_昭阳e42-80网卡驱动-程序员宅基地

文章浏览阅读2.7k次。转载地址:https://blog.csdn.net/sc_lilei/article/details/79545524?utm_source=blogxgwz4 装完系统后, $sudo apt-get upgrade系统版本内核变为:jxl@lenovo:~$ uname -aLinux lenovo 4.4.0-138-generic #164~14.04.1-Ubun..._昭阳e42-80网卡驱动

C和C++安全编码笔记:总结_c与c++安全编码 试题-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏51次。《C和C++安全编码》(原书第2版)这本书是2013年出版的。这里是基于之前所有笔记的简单总结,笔记列表如下:字符串:https://blog.csdn.net/fengbingchun/article/details/105325508指针诡计:https://blog.csdn.net/fengbingchun/article/details/105458861动态内存管理:https://blog.csdn.net/fengbingchun/article/details/105921_c与c++安全编码 试题

C# 读取Word 表格数据(单元格纵合并)_vc++ ole 判断word表格单元格是否合并-程序员宅基地

文章浏览阅读9.4k次。对于word中存在合并单元格的表格: 下图是对Cells遍历的结果,True表示该行该列的单元格存在,False表示不存在。_vc++ ole 判断word表格单元格是否合并

java面向对象--内部类-程序员宅基地

文章浏览阅读55次。将一个类定义在另一个类里面,里面的那个类称为内部类,与属性、方法等一样视作外部类的成员。内部类提供了更好的封装,不允许同包中的其他类访问该内部类。内部类作为外部类的成员,同样可以被4个访问限定符修饰。如果外部类需要访问非静态内部类的成员,必须创建非静态内部类对象来访问。内部类成员可以直接访问外部类的数据。如果存在一个非静态内部类对象,则一定存在一个被它寄存的外部类对象,也就是说在拥有外...

深入浅出 FlatBuffers 之 Schema-程序员宅基地

文章浏览阅读1.3k次。一. FlatBuffers 是什么?FlatBuffers 是一个序列化开源库,实现了与 Protocol Buffers,Thrift,Apache Avro,SBE 和 Cap'n Proto 类似的序列化格式,主要由 Wouter van Oortmerssen 编写,并由 Google 开源。Oortmerssen 最初为 Android 游戏和注重性能的应用而开发了FlatBuffe..._flatbuffers64位

IT发展方向_it以后的几个方向-程序员宅基地

文章浏览阅读626次。自己的IT发展方向。1.做T型进化,横向做语言(java、python)的扩展,纵向主要是算法、模式、计算机原理。2.多系统的学习,WINDOW和LINUX的基本操作及维护。3.尽量做产品,少做项目,提高自己的竞争力。4.外语学习,日语是工作方面,英语是学习方面。坚持做自己喜欢的事。_it以后的几个方向

推荐文章

热门文章

相关标签