欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HSSF、XSSF和SXSSF区别

程序员文章站 2022-07-13 12:59:27
...

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博客

相关标签: Java java poi