用JavaPOI导出Excel时,导的种咱们须要斟酌到Excel版本及数据量的格局题目。针对差别的别总Excel版本,要接纳差别的导的种东西类,若是利用错了,格局会呈现毛病信息。别总JavaPOI导出Excel有三种情势,导的种他们别离是格局1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。
HSSFWorkbook:是别总操纵Excel2003之前(包含2003)的版本,扩大名是导的种.xls;
XSSFWorkbook:是操纵Excel2007后的版本,扩大名是格局.xlsx;
SXSSFWorkbook:是操纵Excel2007后的版本,扩大名是别总.xlsx;
第一种:HSSFWorkbook
poi导出excel最常用的体例;可是此种体例的范围便是导出的行数最多为65535行,超越65536条后体系就会报错。导的种此体例由于行数缺乏七万行以是普通不会产生内存缺乏的格局环境(OOM)。
第二种:XSSFWorkbook
这类情势的别总呈现是为了冲破HSSFWorkbook的65535行范围。其对应的是excel2007(1048576行,16384列)扩大名为“.xlsx”,最多能够导出104万行,不过如许就伴跟着一个题目---OOM内存溢出,缘由是你所建立的book sheet row cell等此时是存在内存的并不耐久化。
第三种:SXSSFWorkbook
从POI 3.8版本起头,供给了一种基于XSSF的低内存占用的SXSSF体例。对大型excel文件的建立,一个关头题目便是,要确保不会内存溢出。实在,就算天生很小的excel(比方几Mb),它用掉的内存是弘远于excel文件现实的size的。若是单元格另有各类格局(比方,加粗,背景标红之类的),那它占用的内存就更多了。对大型excel的建立且不会内存溢出的,就只要SXSSFWorkbook了。它的道理很简略,用硬盘空间换内存(就像hash map用空间换时候一样)。
SXSSFWorkbook是streaming版本的XSSFWorkbook,它只会保管最新的excel rows在内存里供检查,在此之前的excel rows城市被写入到硬盘里(Windows电脑的话,是写入到C盘根目次下的temp文件夹)。被写入到硬盘里的rows是不可见的/不可拜候的。只要还保管在内存里的才能够被拜候到。
SXSSF与XSSF的对照:
a. 在一个时候点上,只能够拜候必然数目的数据
b. 不再撑持Sheet.clone()
c. 不再撑持公式的求值
d. 在利用Excel模板下载数据时将不能静态转变表头,由于这类体例已提早把excel写到硬盘的了就不能再改了
当数据量超越65536条后,在利用HSSFWorkbook或XSSFWorkbook,法式会报OutOfMemoryError:Javaheap space;内存溢出毛病。这时候应当用SXSSFworkbook。
参考链接://blog.csdn.net/qq_34869143/article/details/76512289
//blog.csdn.net/sophie2805/article/details/79246889
//blog.csdn.net/qq_29631809/article/details/72785338
---------------------
作者:YiQ2018
来历:CSDN
原文://blog.csdn.net/YiQ2018/article/details/81458149
版权申明:本文为博主首创文章,转载请附上博文链接!