一、概览
Apache的POI项目是一个Java的开源库,用于读取和写入Office的文件格式(例如:doc,xls和ppt)。对于Excel电子表格文件,POI提供了两种实现:HSSF(Horrible SpreadSheet Format)和XSSF(XML SpreadSheet Format)。
HSSF是POI项目中的旧实现,它使用原生的Microsoft Excel格式进行操作。XSSF是POI项目中的新实现,它使用XML的OOXML(Office Open XML)格式进行操作。
两种实现的区别不仅限于它们使用的文件格式,还包括它们的功能要素以及在使用过程中的一些细节上。
二、文件格式的差异
Excel文件在HSSF和XSSF实现中使用的格式有所不同。HSSF使用二进制的格式,这种格式的文件扩展名为.xls。XSSF使用XML的OOXML格式,这种格式的文件扩展名为.xlsx。因为XML格式是一种开放的标准,所以XSSF更容易与其他基于XML的工具和技术进行协同工作。
三、功能要素的差异
1、处理能力
因为XSSF使用XML格式,所以与HSSF相比,它有更多的功能,并且可以处理更大的电子表格文件。XSSF可以处理由15,000个工作表组成的工作簿,每个工作表可以有1,048,576行和16,384列。相比之下,HSSF最多只能处理380个工作表,每个工作表只能有65,536行和256列。
2、效率
相比之下,HSSF更快且更节省内存。这是因为XML格式的处理需要更多的时间和空间,而HSSF使用的二进制格式更快。在处理较小的电子表格文件时,HSSF通常比XSSF更快。这也意味着对于需要大量处理的电子表格,使用HSSF可能更加可行,而对于需要处理多种格式的电子表格,使用XSSF可能更好。
四、细节方面的差异
从API的角度来看,HSSF和XSSF有一些细节方面的差异。
1、类的名称
// HSSF
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
// XSSF
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
2、获取字符数据的方法名称
// HSSF
HSSFCell.getCellTypeEnum() -> HSSFCell.getCellType()
// XSSF
XSSFCell.getCellTypeEnum() -> XSSFCell.getCellType()
3、日期格式的设置
// HSSF
HSSFCellStyle.ALIGN_RIGHT
// XSSF
HorizontalAlignment.RIGHT
五、代码示例
以下是针对HSSF和XSSF的代码示例:
// 创建工作簿
// HSSF
HSSFWorkbook workbook = new HSSFWorkbook();
// XSSF
XSSFWorkbook workbook = new XSSFWorkbook();
// 获取工作表
// HSSF
HSSFSheet sheet = workbook.createSheet("Sheet1");
// XSSF
XSSFSheet sheet = workbook.createSheet("Sheet1");
// 创建行
// HSSF
HSSFRow row = sheet.createRow((short)0);
// XSSF
XSSFRow row = sheet.createRow(0);
// 获取单元格的内容
// HSSF
HSSFCell cell = row.getCell((short)0);
String value = cell.getRichStringCellValue().getString();
// XSSF
XSSFCell cell = row.getCell(0);
String value = cell.getStringCellValue();