apache POI中HSSFWorkbook和Workbook的区别

16

我正在学习使用apachePOI库读写excel,我找到了两种解决方案,一种是使用HSSFWorkbook,另一种是使用Workbook。现在我有疑问为什么有两种解决方案来实现同一个功能。

我的代码:

FileInputStream fis=new FileInputStream("D:\\Extras\\SeleniumPractice\\TestData.xlsx");     
Workbook workbook=WorkbookFactory.create(fis);
Sheet sheet=workbook.getSheet("TestData");

当我进行搜索时:

FileInputStream file = new FileInputStream(new File("C:\\test.xls"));

             
//Get the workbook instance for XLS file 
HSSFWorkbook workbook = new HSSFWorkbook(file);

 
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);

提前感谢.. :)

谢谢 马赫什

3个回答

46

Workbook是通用接口,可用于处理HSSF (.xls)和XSSF (.xlsx)。如果我没记错的话,它是在POI 3.5中引入的。

如果您使用像Workbook这样的通用接口,您可以透明地在HSSF和XSSF之间切换,而无需更改代码。

如果您只为HSSF编写代码,例如通过HSSFWorkbook,那么您只能处理.xls文件。我建议您尽可能使用通用接口。

您的加载代码应该类似于:

 Workbook wb = WorkbookFactory.create(new File("test.xls"));
 Sheet s = wb.getSheetAt(0);
 ....

这将自动检测文件类型,并根据它所找到的信息为 .xls 或 .xlsx 返回一个可用对象。


非常感谢您宝贵的回答。 - Shetty's
如果这解决了您的问题,请点击旁边的勾选标记接受它 - 在此处查看其含义 - Gagravarr
@Gagravarr,我喜欢你的答案。我在使用XSSF类和.xls文件时遇到了问题。但是我改用了HSSF类。今后会牢记你的答案。 - Pugal

11

我所知道的主要区别是

Workbook 是一个接口,而 HSSFWorkbook、SXSSFWorkbook 和 XSSFWorkbook 是实现 Workbook 接口的类。

public interface Workbook 高级别表示 Excel 工作簿。这是大多数用户在读取或写入工作簿时构建的第一个对象。

public final class HSSFWorkbook extends POIDocument implements Workbook 高级别表示 .xls 工作簿。这是大多数用户在读取或写入 .xls 工作簿时构建的第一个对象。

有关详细信息,请参阅POI api 文档


4

什么是Apache POI?

Apache POI is a popular API that allows programmers to create, modify, 
and display MS Office files using Java programs. 

Apache POI是由Apache Software Foundation提供的100%开源库。
Workbook是创建或维护Excel工作簿的所有类的超级接口,属于org.apache.poi.ss.usermodel包。实现此接口的两个类如下:
(1). HSSFWorkbook:此类具有读写Microsoft Excel .xls格式文件的方法。
(2). XSSFWorkbook:此类具有读写Microsoft Excel和OpenOffice xml文件的方法,支持.xls或.xlsx格式。
HSSFWorkbook是org.apache.poi.hssf.usermodel包中的高级类,实现了Workbook接口,用于.xls格式的Excel文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接