2013-03-11 26 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。