最新接到了一个关于excel导出大批量数据时的优化任务,我们开始采用的是XSSFWorkbook来进行数据的导出,发现前端卡死,一直报400异常。
如图:
XSSFWorkbook tempWorkBook = new XSSFWorkbook();
然后我去仔细看了下有关导出poi的几种方式:HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook。
- HSSFWorkbook:针对是 EXCEL2003 版本,扩展名为 .xls;所以 此种的局限就是 导出的行数 至多为 65535 行,这种情况,因为行数不足七万行 ,所以 一般不会发生 内存不足的情况(OOM)。
- XSSFWorkbook:最多可以导出 104 万行,但是由于创建的 book sheet row cell 等,此时是存在内存的,而且并没有持久化,随着数据量增大 ,内存的需求量也就增大,这样就导致OOM 内存溢出。
- SXSSFWorkbook:SXSSFWorkbook的原理就是用硬盘空间换内存来达到避免OOM的情况,它是streaming版本的XSSFWorkbo