Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在使用Libre Office更新.xls文件后出现在poi API中_Java_Excel_Exception_Apache Poi - Fatal编程技术网

org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在使用Libre Office更新.xls文件后出现在poi API中

org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException在使用Libre Office更新.xls文件后出现在poi API中,java,excel,exception,apache-poi,Java,Excel,Exception,Apache Poi,我正在使用POI api读取Excel,我使用以下代码读取Excel文件 public class ExcelWorkBook { private static ExcelWorkBook excelWorkBook = null; private static String filePath; private static XSSFWorkbook workbook; /** * This cons

我正在使用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;
        }
        .
        .
        .
        .
但它在使用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
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.poimmldocumentpart.read(poimmldocumentpart.java:277)~[poi-ooxml-3.7.jar:3.7]
在org.apache.poi.poimmldocumentpart.read(poimmldocumentpart.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.(XSSFWorkbook.java:189)~[poi-ooxml-3.7.jar:3.7]
在com.excel.ExcelWorkBook上。(ExcelWorkBook.java:48)
在com.excel.ExcelWorkBook.getInstance(ExcelWorkBook.java:60)上
位于com.excel.ExcelParser。(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:null
[STDOUT]在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)~[na:1.6.0\u 45]
[STDOUT]在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)~[na:1.6.0\u 45]
[STDOUT]在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)~[na:1.6.045]
[STDOUT]位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)~[na:1.6.0\u 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:错误:重复属性“type”
[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.(XSSFVMLDrawing.java:102)~[poi-ooxml-3.7.jar:3.7]
[STDOUT]。。。省略47个公共框架
[STDOUT]由以下原因引起:org.xml.sax.SAXParseException:重复属性“type”
[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个公共框架

我在项目中插入了org.apache.xmlbeans。这很有帮助。

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

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

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

使用Microsoft Excel阅读或编辑工作表。
不幸的是,它对我有效。

异常似乎表明文件中包含无效的XML。你确定这是一个有效且未损坏的文件吗?我另外做的唯一一件事是,我用libre office编辑了那个excel文件。这有可能导致腐败吗?我也有同样的问题。当我在Libre Office编辑我的xlsx文件时,它就出现了。虽然我最终从org.xml.sax.saxpasseeption获得了更多的调试信息,但看起来Libre做了一些事情,导致重复标记
,原因是:org.xml.sax.saxpasseeption;systemId:文件:;行号:1;栏目号:344;org.apache.xmlbeans.impl.piccolo.xml.piccolo.reportFatalError(piccolo.java:1038)org.apache.xmlbeans.impl.piccolo.xml.piccolo.parse(piccolo.java:723)org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439)的重复属性“type”(piccolo.java:723)
我也有同样的问题。不知道什么能解决这个问题!!??我对带有注释的.xlsx文件有这个问题。没有评论,即使是用libre编辑的,它似乎运行良好。我对libreoffice4.2.8也有同样的问题。这个错误是由于我添加的评论造成的。5.1版解决了这个问题。就我而言,这解决了我的问题。显然,我已经将Excel更新到了我当前安装的ApachePOI无法再支持的版本。我将我的项目使用的POI版本升级到3.14版本,轻松修复了这次(匆忙安装的)升级导致的少数ClassDefNotFound错误,然后遇到了OP描述的错误。将xmlbeans-2.3.0.jar升级到xmlbeans-2.6.0.jar解决了这个问题,按建议删除注释修复了该问题。然而,对于第二个XLSX文件,我不得不更进一步。在LibreCalc中打开文件后,我将其保存为xls格式,然后打开xls并将其保存为