POI简介

  POI是Apache软件基金会用java编写的免费开源的跨平台的Java API,提供API给java程序对Microsoft Office格式档案读和写的功能,一般用来操作Excel文件。用javaPOI导出Excel时,需要考虑Excel版本和数据量的问题。

 

  JavaPOI导出Excel有三种形式:

      

 

(1) 第一种HSSFWorkbook

  POI导出Excel最常用的方式,局限是导出的行数最多为65535行,超出65536条后系统就会报错,此方式因为行数不足七万行所以一般不会发生内存不足的情况。

(2)第二种XSSFWorkbook

  这种形式突破了HSSFWorkbook的65535行局限,对应excel2007(1048576行,16384列)扩展名为.xlsx,最多可以导出104万行,会有OOM内存溢出,原因是你所创建的book sheet row cell等此时是存在内存的并没有持久化。

(3)第三种SXSSFWorkbook

  从POI3.8版本开始,提供了一种基于XSSF的低内存占用的SXSSF方式。对于大型excel文件的创建,一个关键问题就是,要确保不会内存溢出。对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了。它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样)。 

 

  当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。

 

  参考:https://blog.csdn.net/fuhanghang/article/details/108836891

 

 

excel2003和excel2007对比:

     

  大批量读写数据:

     

 

 

   参考:https://blog.csdn.net/sinat_28007043/article/details/92840532