4

Excel导出超过65535行报异常

 3 years ago
source link: http://www.zhyea.com/2020/11/18/excel-export-exceed-65535-rows-error.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

工程中在使用POI导出Excel数据,某次因为导出的数据量比较大就报了下面的错误:

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 是在POI 3.8 版本时出现的,对 XSSFWorkbook 做了一些优化,通过采用将一定数量的数据写入硬盘临时文件的机制减轻了内存的压力。

参考文档

HSSF XSSF SXSSF


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK