使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute 'o:relid'的解决办法
2017-02-16 09:47
531 查看
1.使用org.apache.poi解析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.<init>(XSSFWorkbook.java:183) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73) at ru.otr.core.Document.<init>(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.<init>(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是否能够正确解析。
相关文章推荐
- 解析xml文件时,错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" set by the Application.的解决办法
- Android中使用DOM解析xml时出现org.xml.sax.SAXParseException: Unexpected token
- xml解析请求DTD错误的解决办法(断网服务器下):org.xml.sax.SAXParseExceptionpublicId
- android用SAX解析xml文件时抛出org.apache.harmony.xml.ExpatParser$ParseException异常的解决方法
- 解决webservice结合spring出现的问题!org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema
- 解决resin的org.xml.sax.SAXParseException问题
- digester解析xml_org.xml.sax.SAXParseException; lineNumber: 2193; columnNumber: 41; 引用了实体 "nbsp", 但未声明它
- POI操作excel2007 出现异常 java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 解决方法
- Android解决异常org.xml.sax.SAXParseException: Unexpected end of document
- sax解析xml运行出现错误org.xml.sax.SAXParseException: Content is not allowed in prolog
- org.xml.sax.SAXParseException: Failed to read schema document 的原因分析与解决方法
- 解析xml文件时,错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" se
- org.xml.sax.SAXParseException: cvc-elt.1:找不到元素“***”的声明。解决方法之一
- "org.xml.sax.SAXParseException: The content of element type "class" must match" 异常解决
- Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)
- ibatis:org.xml.sax.SAXParseException 错误解决方法
- faultString: org.xml.sax.SAXParseException: Premature end of file问题解决方案
- Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)
- sax错误:org.xml.sax.SAXParseException: Content is not allowed in prolog解决
- sax解析xml运行出现错误org.xml.sax.SAXParseException: Content is not allowed in prolog.