2012-05-24 115 views
0

我試圖讀取.xls,.xlsm和.xlsx表單。 如果試圖讀取.xls表格,代碼將正常工作,但如果嘗試讀取.xlsm和.xlsx表格,則會顯示異常。我已經配置了必要的罐子在我classpath-使用POI讀取.xlsm和.xlsx時出現異常

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 

文件,但隨後還我得到以下錯誤 -

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 
+2

你還沒有支付StackExchange的支持合同,所以你不能期待立即回覆... – Gagravarr

回答

0

你可能需要POI-XSSF閱讀的的XLS文件的新格式(含情脈脈命名.XLSX )。

+0

看起來OP已經在使用它(雖然可能錯誤地......) – Gagravarr

+0

你是對的 - 但它全部取決於他們如何導入文件,而不是。 –

1

Excel生成錯誤的XML。可能是特別的。

閱讀:https://bz.apache.org/bugzilla/show_bug.cgi?id=53819

它造成的不良XML。

這可以通過手動刪除重複定義的屬性來修復。

堆棧跟蹤告訴文件包含無效的xml。我檢查了附加的文件,它的確是這樣: /xl/drawings/vmlDrawing1.vml包含這是不允許的重複屬性, 看看下面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" 

您可以打開XSLX作爲zip檔案,找到這個文件並修復它。

相關問題