org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在POI API [英] org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException in POI API

查看:2864
本文介绍了org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在POI API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在读一个Excel使用POI API,我用下面的code读取Excel文件。

 公共类ExcelWorkBook {        私有静态ExcelWorkBook excelWorkBook = NULL;
        私人静态字符串文件路径;
        私有静态XSSFWorkbook工作簿;        / **
         *这个构造函数用于初始化{@link ExcelWorkBook}
         *引发IOException
         * /
        私人ExcelWorkBook()抛出IOException
            尝试{
                工作簿=新XSSFWorkbook(的GetFile());
            }赶上(FileNotFoundException异常前){
                。Logger.getLogger(ExcelWorkBook.class.getName())日志(Level.SEVERE,空,前);
            }
        }        / **
         *这个方法创建一个新的对象{@link ExcelWorkBook}
         * @返回{@link ExcelWorkBook}
         *引发IOException
         * /
        公共静态ExcelWorkBook的getInstance()抛出IOException
            excelWorkBook =新ExcelWorkBook();
            返回excelWorkBook;
        }        / **
         *这个方法创建{@link的FileInputStream}
         * @返回{@link的FileInputStream}
         * @throws FileNotFoundException异常
         * /
        私人的FileInputStream的GetFile()抛出FileNotFoundException异常{
          的FileInputStream文件=新的FileInputStream(新文件(文件路径));
          返回文件;
        }
        。
        。
        。
        。

但其投掷以下其中使用MS Office 2010和未注明日期使用自由报办公室创建一个特定文件的异常。可能是什么问题。异常的堆栈跟踪下面附

  org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException
    在org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:61)〜[POI-OOXML-3.7.jar:3.7]
    在org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:277)〜[POI-OOXML-3.7.jar:3.7]
    在org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:282)〜[POI-OOXML-3.7.jar:3.7]
    在org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:186)〜[POI-OOXML-3.7.jar:3.7]
    。在org.apache.poi.xssf.usermodel.XSSFWorkbook<&初始化GT;(XSSFWorkbook.java:189)〜[POI-OOXML-3.7.jar:3.7]
    在com.excel.ExcelWorkBook<&初始化GT;(ExcelWorkBook.java:48)
    在com.excel.ExcelWorkBook.getInstance(ExcelWorkBook.java:60)
    在com.excel.ExcelParser<&初始化GT;(ExcelParser.java:64)
    在com.database.DatabaseLoader.process(DatabaseLoader.java:85)
    在com.fileuploader.FileUploadHandler.doPost(FileUploadHandler.java:116)




    在java.lang.Thread.run(Thread.java:662)NA:1.6.0_45]
[STDOUT]致:java.lang.reflect.InvocationTargetException:空
[STDOUT]在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)〜[NA:1.6.0_45]
[STDOUT]在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)〜[NA:1.6.0_45]
[STDOUT]在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)〜[NA:1.6.0_45]
[STDOUT]在java.lang.reflect.Constructor.newInstance(Constructor.java:513)〜[NA:1.6.0_45]
[STDOUT]在org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:59)〜[POI-OOXML-3.7.jar:3.7]
[STDOUT] ... 42公共帧省略
[STDOUT]产生的原因:org.apache.xmlbeans.XmlException:错误:重复的属性'类型'
[STDOUT]在org.apache.xmlbeans.impl.store.Locale $ SaxLoader.load(Locale.java:3471)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.XmlObject $ Factory.parse(XmlObject.java:663)〜[XMLBeans的-2.3.0.jar:2.3.0-r540734]
[STDOUT]在org.apache.poi.xssf.usermodel.XSSFVMLDrawing.read(XSSFVMLDrawing.java:107)〜[POI-OOXML-3.7.jar:3.7]
[STDOUT]在org.apache.poi.xssf.usermodel.XSSFVMLDrawing<&初始化GT;(XSSFVMLDrawing.java:102)〜[POI-OOXML-3.7.jar:3.7]
[STDOUT] ... 47公共帧省略
[STDOUT]致:org.xml.sax.SAXParseException:重复的属性'类型'
[STDOUT]在org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportFatalError(Piccolo.java:1038)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:723)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT]在org.apache.xmlbeans.impl.store.Locale $ SaxLoader.load(Locale.java:3439)〜[XMLBeans的-2.3.0.jar:NA]
[STDOUT] ... 53公共帧省略


解决方案

您的Excel将首先被解析成XML。
当XML无效,此异常情况发生。这可能是在创建与Microsoft Office Excel工作表,然后用像自由报或开放式办公室其他一些软件编辑表的情况。

我不知道它是什么,开放式办公或自由报办公室做,但他们做的东西的POI不喜欢的文件。

使用Microsoft Excel来读取或编辑你的床单。
它的工作对我来说,很遗憾。

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

    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

 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

解决方案

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.

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.

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

这篇关于org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在POI API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆