博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute 'o:relid'的解决办法...
阅读量:6081 次
发布时间:2019-06-20

本文共 2772 字,大约阅读时间需要 9 分钟。

1.使用..解析excle,.xlsx类型文件 InputStream is = new FileInputStream(strFileName); XSSFWorkbook wb = new XSSFWorkbook(is); 出现异常如下:
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:408) at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) at org.apache.poi.xssf.usermodel.XSSFWorkbook.
(XSSFWorkbook.java:183) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73) at ru.otr.core.Document.
(Document.java:21) at ru.otr.EnergyLoader.main(EnergyLoader.java:175) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) ... 7 more Caused by: org.apache.xmlbeans.XmlException: error: duplicate attribute 'o:relid' at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3511) at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1277) at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1264) at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:688) at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.read(XSSFVMLDrawing.java:107) at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.
(XSSFVMLDrawing.java:102) ... 12 more Caused by: org.xml.sax.SAXParseException: duplicate attribute 'o:relid' at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportFatalError(Piccolo.java:1038) at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:723) at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3479) ... 18 more 解决办法有点复杂,请大家尝试;
1 InputStream is = new FileInputStream(strFileName); 2 OPCPackage pkg = OPCPackage.open(is); 3 PackagePart p = null; 4 for(PackagePart part:pkg.getParts()){ 5   if(part.getPartName().getName().equals("/xl/drawings/vmlDrawing1.vml")){ 6     p = part; 7   } 8 } 9 if(p != null){10   pkg.removePart(p);11 } 12 XSSFWorkbook wb = new XSSFWorkbook(pkg);
1.使用OPCPackage解压读入的excel流,然后找到出错的那个part,例如/xl/drawings/vmlDrawing1.vml。 2.使用pkg.removePart(p)方法,remove掉就出错的part可以解决了。 3.不过目前只解决了自己遇到的问题,如果大家是其他的part有问题,需要测试一下remove掉后,XSSFWorkbook是否能够正确解析。
 

转载于:https://www.cnblogs.com/pangpanghuan/p/6404299.html

你可能感兴趣的文章
WPF 降低.net framework到4.0
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>