POI提供了HSSF,XSSF,SXSSF三种方式操作Excel。他们的区别如下:
- HSSF:是操作Excel97-2003版本,扩展名为
.xls
; - XSSF:是操作Excel2007版本开始,扩展名为
.xlsx
; - SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低內存占用的操作方式,扩展名为
.xlsx
;
其次,大家需要了解下Excel不同版本的一些区别,這些限制其实间接的局限了POI提供的API功能。
1.支持的行数、列数
- Excel 97-2003版本,一个sheet最大行數65536,最大列數256;
- Excel 2007版本开始,一个sheet最大行數1048576,最大列数16384;
2.文件大小
.xlsx
文件比.xls
的压缩率高,也就是相同数据量下,.xlsx
的文件会小很多。
3.兼容性
- Excel 97-2003版本是不能打开
.xlsx
文件的; - Excel 2007开始的版本是可以打开
.xls
文件的;
根据以上內容,大家可以根据自己的需求進行选择,当然海量数据的导出肯定是推荐SXSSF的方式。编码过程中,其实不同方式的使用方式基本相同,所以互相切换也是比较简单的,只要把带有前缀的接口改成对应的就行了。如:
HSSF对应:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell……
XSSF对应:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell……
SXSSF对应:SXSSFWorkbook、Sheet、Row、Cell……
規律還是挺明顯的吧,除了workbook,SXSSF的接口都不帶前綴,另外兩種方式的各個接口都帶有對應的前綴。
另外,前面有提到SXSSF是一種低內存占用的操作方式,因為其提供了一個新的方法:
SXSSFWorkbook w3= new SXSSFWorkbook(100);//內存中保留100條數據,其余寫入硬盤臨時文件
在數據量超過設置的值時,會在硬盤生成臨時文件保存之前的數據,而且POI會根據規則自動刪除生成的這些臨時文件。
其實到這裏已經結束了,但在好奇心的驅使下,個人想看看POI生成的臨時文件。所以查了一下,大家說是在系統的緩存文件夾下會產生類似的臨時文件,如:
poi-sxssf-sheet6849116696956134782.xml
根據操作系統的不同,通常目錄如下:
Windows7: C:\Users\xxxx\AppData\Local\Temp (xxxx為windows用戶名)
Linux: /var/tmp/
但並沒有找到,後來在tomcat的臨時文件夾下找到了,如:D:\Tomcat_7.0.42\temp。
於是又科普了一下,發現是tomcat的原因,因為在tomcat上運行的應用會通過java.io.tmpdir系統變量獲取到臨時文件的目錄。
大家可以通過下面的語句查看自己應用的臨時文件目錄:
System.out.println(System.getProperty(“java.io.tmpdir”));
雖然POI會根據規則自動刪除臨時文件,但是知道了文件路徑,大家也可以根據實際情況,看是否刪除這些臨時文件。
转载自:HSSF、XSSF和SXSSF區別以及Excel導出優化;
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了