2017-07-07 203 views
1

我使用的Apache POI 3.16这里阅读Excel文件是我的代码为什么我得到这个异常:异常在线程“主要” org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException

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) 

请帮助我,谢谢。

+0

'NotOfficeXmlFileException' - 这是在等一个XLSX,而不是一个XLS。 –

+0

我对Excel文件的阅读并不完全熟悉,但是您是否尝试将其转换为更新的.xlsx格式?这只是一种预感,所以我可能是错的。 –

+0

但我有xls,我不想用xlsx重新保存它,我该如何实现? –

回答

1

您正在创建一个XSSFWorkbook,它只适用于xlsx文件,即基于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

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?

+0

那么你链接到的问答没有任何有用的答案,所以我怀疑它会有所帮助。 –

+0

我认为用户在另一个问题上得到这个错误的方面仍然是他使用了一个正确的xslx文件,可能有助于弄清楚这里发生了什么。 – Chris

相关问题