org.apache.poi。POIXMLException:数组。在一个.xls文件被Libre Office更新后,POI API中的InvocationTargetException

时间:2022-05-06 20:24:12

I am reading an Excel using POI api, I use the following code to read the excel file.

我正在使用POI api读取Excel,我使用以下代码读取Excel文件。

    public class ExcelWorkBook {

        private static ExcelWorkBook excelWorkBook = null;
        private static String filePath;
        private static XSSFWorkbook workbook;

        /**
         * This  constructor used to initialize the {@link ExcelWorkBook}
         * @throws IOException
         */
        private ExcelWorkBook() throws IOException {
            try {
                workbook = new XSSFWorkbook(getFile());
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ExcelWorkBook.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        /**
         * This method create a new object {@link ExcelWorkBook}
         * @return {@link ExcelWorkBook}
         * @throws IOException
         */
        public static ExcelWorkBook getInstance() throws IOException {
            excelWorkBook = new ExcelWorkBook();
            return excelWorkBook;
        }

        /**
         * This method create a {@link FileInputStream}
         * @return {@link FileInputStream}
         * @throws FileNotFoundException
         */
        private FileInputStream getFile() throws FileNotFoundException {
          FileInputStream file = new FileInputStream(new File(filePath));
          return file;
        }
        .
        .
        .
        .

But its throwing following exception in a particular file which is created using MS Office 2010 and undated using Libre office. What could Be the problem. The Stack trace of exception is attached below

但是它在一个特定的文件中抛出了以下的异常,这个文件是使用MS Office 2010创建的,使用Libre Office未注明日期。有什么问题呢?异常的堆栈跟踪附在下面

 org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:61) ~[poi-ooxml-3.7.jar:3.7]
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:277) ~[poi-ooxml-3.7.jar:3.7]
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:282) ~[poi-ooxml-3.7.jar:3.7]
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:186) ~[poi-ooxml-3.7.jar:3.7]
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:189) ~[poi-ooxml-3.7.jar:3.7]
    at com.excel.ExcelWorkBook.<init>(ExcelWorkBook.java:48) 
    at com.excel.ExcelWorkBook.getInstance(ExcelWorkBook.java:60) 
    at com.excel.ExcelParser.<init>(ExcelParser.java:64) 
    at com.database.DatabaseLoader.process(DatabaseLoader.java:85) 
    at com.fileuploader.FileUploadHandler.doPost(FileUploadHandler.java:116) 
.
.
.
.
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
[STDOUT] Caused by: java.lang.reflect.InvocationTargetException: null
[STDOUT]    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0_45]
[STDOUT]    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) ~[na:1.6.0_45]
[STDOUT]    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) ~[na:1.6.0_45]
[STDOUT]    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) ~[na:1.6.0_45]
[STDOUT]    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:59) ~[poi-ooxml-3.7.jar:3.7]
[STDOUT]    ... 42 common frames omitted
[STDOUT] Caused by: org.apache.xmlbeans.XmlException: error: duplicate attribute 'type'
[STDOUT]    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3471) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:663) ~[xmlbeans-2.3.0.jar:2.3.0-r540734]
[STDOUT]    at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.read(XSSFVMLDrawing.java:107) ~[poi-ooxml-3.7.jar:3.7]
[STDOUT]    at org.apache.poi.xssf.usermodel.XSSFVMLDrawing.<init>(XSSFVMLDrawing.java:102) ~[poi-ooxml-3.7.jar:3.7]
[STDOUT]    ... 47 common frames omitted
[STDOUT] Caused by: org.xml.sax.SAXParseException: duplicate attribute 'type'
[STDOUT]    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportFatalError(Piccolo.java:1038) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:723) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) ~[xmlbeans-2.3.0.jar:na]
[STDOUT]    ... 53 common frames omitted

3 个解决方案

#1


4  

I had exactly the same exception after I edited with Libe Office a .xlsx file containing comments. The removal of the comments solved the issue.

在使用Libe Office a .xlsx文件编辑了包含注释的内容后,我遇到了完全相同的异常。删除评论解决了这个问题。

#2


3  

Your Excel will be parsed into XML first. This exception happens when the xml is invalid. This can be the case when you create the Excel Sheet with Microsoft Office and then edit the Sheet with some other Software like Libre or Open office.

您的Excel将首先解析为XML。当xml无效时,会发生此异常。当您使用Microsoft Office创建Excel表格,然后使用Libre或Open Office等其他软件编辑表格时,可能会出现这种情况。

I don't know what it is that Open Office or Libre Office do, but they do something to the document that POI doesn't like.

我不知道Open Office或Libre Office做什么,但是他们对POI不喜欢的文件做了一些事情。

Use Microsoft Excel to read or edit your sheets. It worked for me, unfortunately.

使用microsoftexcel阅读或编辑表格。不幸的是,它对我起了作用。

#3


2  

I have inserted org.apache.xmlbeans in project. It helped.

我已经插入的表示。xmlbeans的项目。它帮助。

#1


4  

I had exactly the same exception after I edited with Libe Office a .xlsx file containing comments. The removal of the comments solved the issue.

在使用Libe Office a .xlsx文件编辑了包含注释的内容后,我遇到了完全相同的异常。删除评论解决了这个问题。

#2


3  

Your Excel will be parsed into XML first. This exception happens when the xml is invalid. This can be the case when you create the Excel Sheet with Microsoft Office and then edit the Sheet with some other Software like Libre or Open office.

您的Excel将首先解析为XML。当xml无效时,会发生此异常。当您使用Microsoft Office创建Excel表格,然后使用Libre或Open Office等其他软件编辑表格时,可能会出现这种情况。

I don't know what it is that Open Office or Libre Office do, but they do something to the document that POI doesn't like.

我不知道Open Office或Libre Office做什么,但是他们对POI不喜欢的文件做了一些事情。

Use Microsoft Excel to read or edit your sheets. It worked for me, unfortunately.

使用microsoftexcel阅读或编辑表格。不幸的是,它对我起了作用。

#3


2  

I have inserted org.apache.xmlbeans in project. It helped.

我已经插入的表示。xmlbeans的项目。它帮助。