Excel导出之内存溢出/64000个单元格创建了单元格样式,导致报错

XSSFWorkbook对象来读取模板

通过XSSFWorkbook对象来读取模板,然后将数据填充在读取的模板中,但是当你数据量过大时,官方XSSFWorkbook说最多导出65535行,但实际可能达不到这个数量就会报OOM(内存溢出)的错误了。

SXSSFWorkbook导出大数据量的数据
通过SXSSFWorkbook,解决大数据量导出的问题,但是SXSSFWorkbook不能支持直接读取模板了,也就是说我们直接使用此对象无法读取模板的内容。使用的是临时文件(XML)的方式来释放内存,但是程序运行的过程中,数据量过大使用sxxsf对象来创建excel及时设置了写入临时文件(500个对象)也会发生堆内存不足的情况,因为磁盘速度始终会比内存速度慢,在某时间,还没来及写到磁盘,但是堆内存已经满了,就会出现堆内存不足的情况。

示例:
/*
注意:这种方式只能设置值,但是不能改变已经存在的值,如果想要改变的话只能重新create你想要改变的行或者单元格,
这样再去重新设置行或者单元格就好了。
*/
//获取XSSFWorkbook对象
XSSFWorkbook wb = new XSSFWorkbook(new File("C:\\Users\\Administrator\\Desktop\\XXXXXX.xlsx"));
//获取SXSSFWorkbook对象
SXSSFWorkbook swb = new SXSSFWorkbook(wb,100);
//根据SXSSFWorkbook 获取XSSFWorkbook对象的Sheet
XSSFWorkbook xssfWorkbook = swb.getXSSFWorkbook();
//获取sheet页
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
//获取行单元格并且设置值
Row row = xssfSheet.getRow(1);
Cell cell = row.getCell(2);
cell.setCellValue("cehi2");
swb.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\ceshi.xlsx"));


参考文献:
https://wenku.baidu.com/view/127c0fde0142a8956bec0975f46527d3240ca628.html
https://wenku.baidu.com/view/a0d3bf68fd4733687e21af45b307e87101f6f8a2.html
https://blog.csdn.net/qq_29649547/article/details/125042550

posted on 2022-06-12 13:57  花非花-雾非雾  阅读(1315)  评论(0)    收藏  举报