使用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

智能推荐

【SassError: expected selector报错 用::v-deep 替换 /deep/的真实写法】_unexpected unknown pseudo-element selector "::v-de-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏2次。关于SassError: expected selector报错 ::v-deep 替换 /deep/的正确替换方式_unexpected unknown pseudo-element selector "::v-deep

Linux学习笔记 第0章:计算机概论_字长 位宽-程序员宅基地

文章浏览阅读301次。0.1.0计算机本质计算机:接受用户输入的命令与数据,经由中央处理器的算术与逻辑单元运算处理后产生储存成有用的信息算术逻辑单元(Arithmetic&logical Unit:是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由与门 和或门构成的算术逻辑单元,主要功能是进行二位元的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的..._字长 位宽

Curve25519 Field域2^255-19内的快速运算_curve25519标量乘-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏3次。1. 引言对于Curve25519,其Field域内的module Fp = 2255-19。若采用常规的Montgomery reduce算法,其运算性能并不是最优的。如要求某整数 u mod (2^255-19),可将m整数用多项式做如下表示:u=∑iuixi,其中,ui=n∗2⌈25.5i⌉,n∈Nu=\sum_{i}^{}u_ix^i,其中,u_i=n*2^{\left \lce..._curve25519标量乘

超全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 欧拉筛

随便推点

【linux之进程间通信】——管道_管道read-程序员宅基地

文章浏览阅读2.6k次,点赞9次,收藏11次。进程间是怎么通信的之前我们说过,进程与进程之间是相互独立的,它们的数据也是绝对独立的,那么如果一个进程要向另一个进程发送数据,发送消息等通信,那么这时怎么做到的呢?管道所谓的管道,是内存中的一个缓存文件,进程A在管道写入数据,实际是写入到内核中的缓存文件中,进程B从管道中读取数据,实际是从内核的缓存文件中读取数据。管道的传输数据是单向的,只能由一个进程写入,一个进程读出。匿名管道概念匿名管道是没有名字的,它是特殊文件,它只存在内存中,不存在我们文件系统中,即用完就销._管道read

DermoSegDiff: A Boundary-aware Segmentation Diffusion Model for Skin Lesion Delineation-程序员宅基地

文章浏览阅读445次,点赞5次,收藏10次。DermoSegDiff:用于皮肤病变描绘的边界感知分割扩散模型摘要:皮肤病变分割对皮肤病的早期发现和准确诊断起着至关重要的作用。消噪扩散概率模型(ddpm)最近因其出色的图像生成能力而受到关注。在这些进展的基础上,我们提出了DermoSegDiff,这是一个在学习过程中包含边界信息的皮肤病变分割的新框架。我们的方法引入了一种新的损失函数,在训练过程中对边界进行优先排序,逐渐降低其他区域的重要性。我们还介绍了一种新的基于u - net的去噪网络,该网络可以熟练地将网络内的噪声和语义信息集成在一起。在多个_dermosegdiff

常用集函数,count(),sum(),avg(),max(),min()_python round(avg_score, 2)-程序员宅基地

文章浏览阅读1.3w次。1. count()返回匹配制定条件的行数 count(*)返回在给定的选择中被选的行数。2.sum()返回组中所有值的和。sum只能用于数字列,空值会被忽略!3.avg()返回组中值的平均值,空值回避忽略!4.max()返回组中值的最大值5.min()返回组中值的最小值6.过滤掉最低分小于60的学生select snum,sum(scor_python round(avg_score, 2)

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表格单元格是否合并

推荐文章

热门文章

相关标签