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