2013-03-11 142 views
19

由於POI具有更多功能,因此我從jxl切換到了poi。但是,我無法處理以舊格式生成的xls文件。現在,我收到此錯誤:如何使用POI處理舊的excel .xls文件?

org.apache.poi.hssf.OldExcelFormatException: The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format. POI only supports BIFF8 format (from Excel versions 97/2000/XP/2003)

現在我想同時使用JXL作爲取決於XLS版本井作爲POI所以對於舊格式的XLS文件,我將使用JXL而對於新版本,我將使用POI。這是一個好的解決方案嗎?有沒有其他的選擇?

+4

難道那是一個Excel 5.0/7.0文件嗎? – 2013-03-11 10:39:39

+2

是的,我確認它是一個Excel 5/7文件(Office 95) – Wael 2013-03-11 11:42:03

+2

使用單個API肯定更好,因爲它會降低複雜性。但只有這兩個纔是讀取Excel最成熟的API。所以按照我的看法,這是做這件事的最好方式。 – 2015-12-18 14:13:50

回答

11

對於舊的Excel格式的文件,您有以下選擇:

  1. HSSF,該POI實現了Excel '97(-2007)文件格式。
    • 如果您只是想提取文本內容,那麼您可以使用OldExcelExtractor,它將只從文件中提取 文本和數字。
    • 如果你需要從特定細胞中的值,那麼你就需要採取 做法有點像OldExcelExtractor,工藝文件在記錄 水平,並檢查座標上OldStringRecordNumberRecordOldFormulaRecord和朋友。
  2. 正如你已經提到的,JXL也可以處理一些情況。
  3. 使用JDBC/ODBC驅動程序。它不像HSSF那樣靈活,但對於一些舊格式,它是提取信息的唯一方法。
+1

文本「JDBC/ODBC」引用的鏈接看起來並不指向任何相關內容。 – James 2015-12-17 23:21:23

+1

@James謝謝,我更新了一個新的鏈接到一個新的URL,似乎前一頁被刪除:( – dan 2015-12-18 05:23:49

+0

嗨感謝您的答案,只是我知道如果有一種方法來檢測Excel文件的格式是BIFF5? – esprittn 2016-02-27 08:58:29

-4

按我的知識,你可以使用此代碼讀取.xls格式

FileInputStream in=new FileInputStream(new File("filename.xls")); 
Wookbook wb=new HSSFWorkbook(in); 

的Excel文件讀取新的Excel版本(2007年及以上):

FileInputStream in=new FileInputStream(new File("filename.xls")); 
    Wookbook wb=new XSSFWorkbook(in); 

外部JAR你需要的文件:

1. poi-3.9 
2. dom4j-1.6.1 
3. XMLbeams-2.5.0 

如果你的工作只需要你使用.xls然後只有poi-3.0將suf FICE。您需要其他罐子來配合新版本的Excel。