使用poi生成excel,当遇到大数据量时,会有几个问题:
1. 目前office2003 excle每个sheet最大支持行数为65536,当数据超过65536行时,会报异常
2. 当列为17列左右,数据行数达到50w条左右时,会包OOM错误
Exception in thread "15124183@qtp-16902686-1" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-13" java.lang.OutOfMemoryError: Java heap space
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119)
问题1比较好解决,每次写入数据时,都获取sheet最后一行,在最后一行后继续写入数据,判断当最大行数大于65536或再小些,生成新的sheet,就能解决此问题。
具体代码片段
int sheetLastSize = sheet.getLastRowNum();
// 如果数据是最大写入数的整数倍(Constants.EXCEL_SHEET_DATASIZE为最大行数)