easyexcel合并单元格导出内存溢出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyexcel合并单元格导出内存溢出相关的知识,希望对你有一定的参考价值。
easyexcel合并单元格导出内存溢出是一个比较常见的问题,主要是因为在合并单元格的时候,由于数据量太大,导致内存溢出。解决这个问题的方法有:1、减少合并单元格的数量;2、优化excel文件,减少数据量;3、更换更高配置的电脑,提高内存容量;4、使用更高版本的excel,支持更大的数据量。总之,您可以根据自己的实际情况,选择合适的解决方案来解决这个问题。 参考技术A 对于您这个问题解答EasyExcel内存溢出可能是由于内存不足引起的,可以采取以下措施来解决:1. 根据实际需求减少单元格合并的数量;
2. 调整JVM参数,如增加内存空间;
3. 使用流式写入,而不是一次性写入;
4. 将写入和合并操作分离;
5. 将数据分割成多次写入,减少单次写入的数据量。 参考技术B 一. 概述
在处理导出大数据时, 如果全部查出来再导出, 这样容易导致内存溢出, 为防止内存溢出, 可以分批查询进行导出
二. 示例
场景: 现在到导出30000条数据, 计划每次查询10000进行处理, 导出3个sheet, 每个sheet10000条数据
public class Test
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class TestVO
@ExcelProperty(value = "*姓名", index = 0)
private String name;
@ExcelProperty(value = "*年龄", index = 1)
private int age;
@ExcelProperty(value = "学校", index = 2)
private String school;
/**
* 测试分批查询导出
*/
@Test
public void testBatchExport() throws Exception
FileOutputStream outputStream = new FileOutputStream("D:/1.xlsx");
ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
/**
* 分批查询进行导出
* 示例: 现在要导出30000条数据, 模拟每次查询出10000条数据进行导出(防止全部查出内存溢出), 循环3次
*/
WriteSheet writeSheet = EasyExcel.writerSheet(0).head(TestVO.class).build();
for(int i = 0 ; i < 3 ; i++)
// 每次查询10000条数据
List
testVOS = new ArrayList<>();
for(int j = 0; j < 10000;j++)
TestVO testVO = new TestVO("名字"+j,j,"学校"+j);
testVOS.add(testVO);
excelWriter.write(testVOS,writeSheet);
excelWriter.finish();
SpringBoot入门教程:下载导出Excel(EasyExcel)
一:Apache POI 和 EasyExcel的区别
- Apache POI是将数据一次性全部读入到内存中,当导入excel文件过大时会容易内存溢出
java.lang.OutOfMemoryError
。 - EasyExcel 不会将全部数据一次性全部加载到内存,而是分批加载,EasyExcel不会出现内存溢出问题。
- EasyExcel是对Apache POI的进一步封装,提供了更加使用简便的功能。
二:常用注解
2.1 列
@ExcelProperty(value = "手机号", index = 0, order = 0, converter = CustomPhoneConverter.class)
:用于定义Excel表头,value: 列名,index:该类位于第几列,从0开始,order:排序,converter:转换器,用来对值做自定义处理。@ExcelIgnore
:忽略该列,忽略的不会出现在Excel中。
2.2 格式化
@NumberFormat("#.##")
:对数字进行格式化。@DateTimeFormat("yyyy年MM月d
以上是关于easyexcel合并单元格导出内存溢出的主要内容,如果未能解决你的问题,请参考以下文章