Pranita Vatsa
Pranita Vatsa

Reputation: 11

Getting exception in reading .xlsm and .xlsx using POI

I m trying to read .xls,.xlsm and .xlsx sheet. Code works properly if tried to read .xls sheet but shows exception if tried to read .xlsm and .xlsx sheet. I have configured necessary jars file in my classpath-

poi-3.8-20120326.jar,
poi-examples-3.8-20120326.jar,
poi-excelant-3.8-20120326.jar,
poi-ooxml-3.8-20120326.jar,
poi-ooxml-schemas-3.8-20120326.jar,
poi-scratchpad-3.8-20120326.jar,
ooxml-schemas-1.0.jar,
xmlbeans-2.3.0.jar,
dom4j-1.6.1.jar,
geronimo-stax-api_1.0_spec-1.0.1.jar

but then also I am getting below error-

Exception in thread "main" 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 screens.LireEcrire.main(LireEcrire.java:26)
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)
... 5 more
Caused by: org.apache.xmlbeans.XmlException: error: duplicate attribute 'o:relid'
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3471)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)
at   org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:663)
at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.read(XSSFVMLDrawing.java:107)
at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.<init>(XSSFVMLDrawing.java:102)
... 10 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:3439)
... 16 more

Upvotes: 0

Views: 3053

Answers (2)

Enyby
Enyby

Reputation: 4420

Excel generated bugged xml. May be specially.

Read this: https://bz.apache.org/bugzilla/show_bug.cgi?id=53819

It caused by bad xml.

This can be fixed by manully removed duplcate definition of attribute.

The stack trace tells that the file contains invalid xml. I checked the attached file and it is indeed so: /xl/drawings/vmlDrawing1.vml contains duplicate attributes which is not allowed, have a look at the following fragemnt:

  <v:fill o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1"
   o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1"
   o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1"
   o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1"
   o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1" o:relid="rId1"

You can open xslx as zip archive, find this file and fix it.

Upvotes: 1

David B
David B

Reputation: 2698

You probably need POI-XSSF to read the new format of XLS files (lovingly named .XLSX).

Upvotes: 0

Related Questions