使用Java apache-poi打开某些Excel文件时遇到问题

问题描述

我有一组需要阅读的Excel文件,在某些情况下,我需要对其进行修改。我的代码可以打开并读取一些Excel文件,对于某些Excel文件,它会显示要打开的错误消息,

这是代码的主要部分:

    String fileName = "inputs\\Myfiles.xlsx";
    
    FileInputStream file = new FileInputStream(new File(fileName));
    
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    
    int totalSheets = workbook.getNumberOfSheets();
    
    System.out.println("The file has " + totalSheets + " sheets.\n");

    //Get first/desired sheet from the workbook
    XSSFSheet sheet = workbook.getSheetAt(0);

    //Iterate through each rows one by one
    Iterator<Row> rowIterator = sheet.iterator();
    while (rowIterator.hasNext()) 
    {
        Row row = rowIterator.next();
        //For each row,iterate through all the columns
        Iterator<Cell> cellIterator = row.cellIterator();
         
        while (cellIterator.hasNext()) 
        {
            Cell cell = cellIterator.next();
            //Check the cell type and format accordingly
            switch (cell.getCellType()) 
            {
                case Cell.CELL_TYPE_NUMERIC:
                    System.out.print(cell.getNumericCellValue() + "\t");
                    break;
                case Cell.CELL_TYPE_STRING:
                    System.out.print(cell.getStringCellValue() + "\t");
                    break;
                //case Cell.CELL_TYPE_FORMULA
            }
        }
        System.out.println("");
    }
    file.close();

这是我遇到的错误

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:207)
    at ReadingFromExcelDemo.main(ReadingFromExcelDemo.java:36)
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: Content is not allowed in trailing section.
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3448)
    at org.apache.xmlbeans.impl.store.Locale.parsetoXmlObject(Locale.java:1272)
    at org.apache.xmlbeans.impl.store.Locale.parsetoXmlObject(Locale.java:1259)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
    at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:722)
    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; systemId: file://; lineNumber: 29; columnNumber: 18; Content is not allowed in trailing section.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(UnkNown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver.next(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(UnkNown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(UnkNown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(UnkNown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(UnkNown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(UnkNown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(UnkNown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(UnkNown Source)
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3422)
    ... 16 more

我注意到Excel文件中有关于一栏的注释,用箭头删除该注释不会产生任何错误并且可以正常工作。

在调试过程中,我注意到XSSFWorkbook workbook = new XSSFWorkbook(file);这条语句正在制造所有麻烦。

这是一个Java项目,在Eclipse(不是Maven)中,我正在使用Apache Poi库。

最近几天我一直收到此错误,尝试了许多我在本网站以及Google中发现的东西,任何建议都将非常有帮助。非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)