2011-06-17 96 views
0

我正在閱讀excel文件* (2000000行,6列) *帶有xlsx擴展名。讀它使用Java Excel的API,但它拋出異常如何使用* .xlsx擴展名讀取Excel文件?

jxl.read.biff.BiffException: Unable to recognize OLE stream 

當嘗試用XLS擴展名相同的文件它完美地讀,但它僅讀取65536行數據僅存行的其餘unread.please幫助我如何,我能用xlsx擴展名讀取剩餘的行。

感謝

回答

-1
  1. 不要讀微軟的格式。如果你想要一個Excel文檔讀取一個CSV,逗號分隔的列表。
  2. 您的圖書館似乎並不支持XLSX
  3. 採取這裏Choosing an excel java api
+3

-1:像這樣的答案不是很有建設性 - 我猜想山姆有一些具體的業務用例,他需要支持解析Excel文件。作爲一個必須解析WML文件的人,我完全明白他爲什麼會遇到這個問題。 – cwallenpoole 2011-06-17 08:57:30

+0

我也必須解析WML。解決方案不是解析WML。試圖保持與WML的兼容性是一個可怕的長期戰略。但如果他想這樣做的話,那就是#2和#3。 – Mikhail 2011-06-17 22:27:19

0

看看問題是在Office 07微軟改變了文檔格式的東西這是或多或少一個zip文件包含大量的XML。 Java Excel API依賴於舊的文件格式。要從Office '07中讀取某些內容,請使用Apache POI

1

對於我們用下面的罐子閱讀XLSX文件,

1.dom4j-1.6.1.jar 2.org-Apache的公地codec.jar 3.poi-3.7.jar 4.poi -ooxml-3.5-FINAL.jar 5.poi-OOXML-模式-3.11-beta2.jar 6.stax-API-1.0.1.jar 7.xmlbeans-2.6.0.jar

這是函數通過它可以讀取xlsx文件。

public static void readXLSX(String path) { 
    File file = new File(path); 
    String value = ""; 
    XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(path)); 
    XSSFSheet sheet = wb.getSheetAt(0); 

    Row row; 
    Cell cell; 

    Iterator<Row> rowIterator = sheet.iterator(); 

    while (rowIterator.hasNext()) { 
     row = rowIterator.next(); 
     Iterator<Cell> cellIterator = row.cellIterator(); 
     while (cellIterator.hasNext()) { 
        cell = cellIterator.next(); 
        switch (cell.getCellType()) { 
         case Cell.CELL_TYPE_BOOLEAN: 
          value = "" + cell.getBooleanCellValue(); 
          break; 
         case Cell.CELL_TYPE_NUMERIC: 
          value = "" + cell.getNumericCellValue(); 
          break; 
         case Cell.CELL_TYPE_STRING: 
          value = "" + cell.getStringCellValue(); 
          break; 
         case Cell.CELL_TYPE_BLANK: 
          value = " "; 
          break; 
         default: 
          break; 
        } 
        System.out.println("Value: "+value); 
    } 

} 
相關問題