工程中在使用POI导出Excel数据,某次因为导出的数据量比较大就报了下面的错误:
1 2 3 4 |
java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) at org.apache.poi.hssf.usermodel.HSSFRow.setRowNum(HSSFRow.java:233) at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:87) at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:71) |
查了下资料,了解到问题在于使用了HSSFWorkbook
。HSSFWorkbook
用来操作Excel2003以前(包括2003)的版本,限制了每个Sheet导出的行数至多为65535行。
要修复这个问题可以考虑使用XSSFWorkbook
或者SXSSFWorkbook
。如果要导出的数据量特别大,建议使用后者。因为XSSFWorkbook
会将全部要写入Excel中的数据保存在内存中,数据量太大的话就会导致内存溢出错误。
SXSSFWorkbook
是在POI3.8版本时出现的,对XSSFWorkbook
做了一些优化,通过采用将一定数量的数据写入硬盘临时文件的机制减轻了内存的压力。
发表评论