为什么会出现这种异常:线程中的异常" main" org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException

时间:2017-07-07 06:55:24

标签: java excel apache

我正在使用apache poi阅读excel文件3.16这里是我的代码

try
        {
            String excelPath = "C:\\Users\\wecme\\Desktop\\AccountStatement.xls";
            FileInputStream fileInputStream = new FileInputStream(new File(excelPath));

            // Create Workbook instance holding .xls file   
            XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);

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

            // Iterate through each rows
            java.util.Iterator<Row> rowIterator = sheet.iterator();

            while (rowIterator.hasNext())
            {
                // Get Each Row
                Row row = rowIterator.next();

                // Iterating through Each column of Each Row
                java.util.Iterator<Cell> cellIterator = row.cellIterator();

                while (cellIterator.hasNext())
                {

                    Cell cell = cellIterator.next();

                    // Checking the cell format
                    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_BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + "\t");
                        break;


                    }  
                }
                System.out.println("");
            }  

        } catch (IOException ie)
        {
            ie.printStackTrace();
        }

我的Excel数据如下所示:

Datetime    Description TransactionId   Credit Amount   Debit Amount    Remaining   OdAmount    EnteredBy   Remarks
1/6/2017 8:14   IDEA (9542010237) COMMISSION    GLGHQN  0.31    0   2721.92 0   iNHYD0390437LO  IDEA COMMISSION

当我读到其他没有时间的文件时,正确读取日期,但是当我尝试阅读此文件时,此异常即将来临

Exception in thread "main" org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:286)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:758)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:327)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:291)
at excelRead.ReadExcel.main(ReadExcel.java:27)

请帮帮我,谢谢。

2 个答案:

答案 0 :(得分:1)

您正在创建一个仅适用于处理xlsx文件的XSSFWorkbook,即基于xml的新办公室格式。但是,您的文件扩展名(xls)表明这是较旧的Microsoft Office(2003年我猜)格式。要修复错误,您需要将文件转换为xlsx格式,或者需要使用HSSFWorkbook

您可以在此处找到有关HSSF的一些示例:https://poi.apache.org/spreadsheet/examples.html#hssf-only 有关XDDF的一些示例可以在这里找到:https://poi.apache.org/spreadsheet/examples.html#xssf-only

答案 1 :(得分:0)

根据抛出异常的代码(参见:https://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java?view=markup#l286

并且包的名称(openxml4j)要求文件采用openxml兼容格式。 (即xlsx)

在您的情况下,库无法打开文件,因为它不是可以打开的.zip格式。

这个问题也在两个月前被问过,也许这也有帮助:

How to fix NotOfficeXmlFileException in java Apache POI?