当前位置: 首页 > 工具软件 > XSSF > 使用案例 >

HSSF、XSSF和SXSSF区别

龙嘉玉
2023-12-01

POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。他们的区别如下:

HSSF:

        是操作Excel97-2003版本,扩展名为.xls。

XSSF:

        是操作Excel2007版本开始,扩展名为.xlsx。

SXSSF:

        是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。

Excel不同版本的一些区别如下,这些限制其实间接的局限了POI提供的API功能。

1、支持的行数、列数

        Excel97-2003版本,一个sheet最大行数65536,最大列数256。

        Excel2007版本开始,一个sheet最大行数1048576,最大列数16384。

2、文件大小

        .xlsx文件比.xls的压缩率高,也就是相同数据量下,.xlsx的文件会小很多。

3、兼容性

        Excel97-2003版本是不能打开.xlsx文件的。

        Excel2007开始的版本是可以打开.xls文件的。

前面有提到SXSSF是一种低内存占用的操作方式,因为其提供了一个新的方法:

SXSSFWorkbook w= new SXSSFWorkbook(100);//内存中保留100条数据,其余写入硬盘临时文件

在数据量超过设置的值时,会在硬盘生成临时文件保存之前的数据,而且POI会根据规则自动删除生成的这些临时文件。

SXSSF通过一个滑动窗口来限制访问Row的数量从而达到低内存占用的目录,XSSF可以访问所有行。旧的行数据不再出现在滑动窗口中并变得无法访问,与此同时写到磁盘上。

在自动刷新的模式下,可以指定窗口中访问Row的数量,从而在内存中保持一定数量的Row。当达到这一数量时,在窗口中产生新的Row数据,并将低索引的数据从窗口中移动到磁盘中。或者,滑动窗口的行数可以设定成自动增长的。它可以根据需要周期的根据一次明确的flushRow(int keepRows)调用来进行修改。

注意:针对 SXSSF Beta 3.8下,会有临时文件产生,比如:
poi-sxssf-sheet4654655121378979321.xml
文件位置:java.io.tmpdir这个环境变量下的位置
Windows 7下是C:\Users\xxxxxAppData\Local\Temp
Linux下是 /var/tmp/
要根据实际情况,看是否删除这些临时文件

参考:

        1.POI使用HSSF,XSSF,SXSSF三种方式 - 简书

        2.​​​​​​HSSF,XSSF和SXSSF的区别 - 博客园杀手 - 博客园

        3.POI导出Excel的工具类:HSSFWorkbook与SXSSFWorkbook比较_小哥的专栏-CSDN博客

 类似资料: