通过设置sheet数量,完成分批导出,每个sheet存100万数据,每次查询插入20万数据,避免超时,内存溢出等问题,可以根据服务器配置调整参数设置。
1.引入依赖

            <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>

2.创建对应的实体类
@ExcelProperty设置的就是导出的列名,还可以设置排序等等

@Data
@NoArgsConstructor
@AllArgsConstructor
public class AltitudeMonExportExcelVO implements Serializable {@ExcelProperty(value = "站名")private String cname;@ExcelProperty(value = "站号")private String v01301;@ExcelProperty(value = "月平均气温(气温)")private String v12001_701="0";@ExcelProperty(value = "月平均气压")private String v10004_701="0";@ExcelProperty(value = "月平均相对湿度(相对湿度)")private String v13003_701="0";@ExcelProperty(value = "月平均温度露点差(露点温度)")private String v12301_701="0";
}

3.核心导出代码

public void exportSurfList2(StatisticsRequestVo requestVo,HttpServletResponse response) throws IOException {log.info("*********地面统计查询列表导出开始!**************");//文件名String fileName =String.valueOf(System.currentTimeMillis());OutputStream outputStream =null;try {//记录总数:实际中需要根据查询条件进行统计即可:一共多少条int totalCount=mapper.seleCount();//每一个Sheet存放100w条数据Integer sheetDataRows = ExcelConstants.PER_SHEET_ROW_COUNT;//每次写入的数据量20w,每页查询20WInteger writeDataRows = ExcelConstants.PER_WRITE_ROW_COUNT;//计算需要的Sheet数量Integer sheetNum = totalCount % sheetDataRows == 0 ? (totalCount / sheetDataRows) : (totalCount / sheetDataRows + 1);//计算一般情况下每一个Sheet需要写入的次数(一般情况不包含最后一个sheet,因为最后一个sheet不确定会写入多少条数据)Integer oneSheetWriteCount = sheetDataRows / writeDataRows;//计算最后一个sheet需要写入的次数Integer lastSheetWriteCount = totalCount % sheetDataRows == 0 ? oneSheetWriteCount : (totalCount % sheetDataRows % writeDataRows == 0 ? (totalCount / sheetDataRows / writeDataRows) : (totalCount / sheetDataRows / writeDataRows + 1));outputStream = response.getOutputStream();//必须放到循环外,否则会刷新流ExcelWriter excelWriter = EasyExcel.write(outputStream).build();//开始分批查询分次写入for (int i = 0; i < sheetNum; i++) {//创建SheetWriteSheet sheet = new WriteSheet();sheet.setSheetName("Sheet"+i);sheet.setSheetNo(i);//循环写入次数: j的自增条件是当不是最后一个Sheet的时候写入次数为正常的每个Sheet写入的次数,如果是最后一个就需要使用计算的次数lastSheetWriteCountfor (int j = 0; j < (i != sheetNum - 1 ? oneSheetWriteCount : lastSheetWriteCount); j++) {//分页查询一次20wPage page1 = new Page(j + 1 + oneSheetWriteCount * i, writeDataRows);//查询分页列表---按照自己的业务查列表,分页这个一定要使用这个:page1.getPageNum(),page1.getPageSize()!!!List<Map<String, Object>> list = mapper.selectList(page1.getPageNum(),page1.getPageSize());List<AltitudeMonExportExcelVO > SurfDayList = new ArrayList<>();//写入到excel:/**************z只需要选择一种方式即可*****************///这里可以通过设置includeColumnFiledNames、excludeColumnFiledNames导出什么字段,可以动态配置,前端传过来那些列,就导出那些列//方式1、只导出v01301这一列Set<String> includeColumnFiledNames = new HashSet<String>();includeColumnFiledNames.add("v01301");WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class).includeColumnFiledNames(includeColumnFiledNames).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();//方式2、排除v01301这一列,其他的全部导出Set<String> excludeColumnFiledNames = new HashSet<String>();excludeColumnFiledNames.add("v01301");WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class).excludeColumnFiledNames(includeColumnFiledNames).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();excelWriter.write(list, writeSheet);//方式3、不做设置,全部导出WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();excelWriter.write(list, writeSheet);}}// 下载EXCEL,返回给前段stream流response.setContentType("application/octet-stream");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");excelWriter.finish();outputStream.flush();outputStream.close();log.info("*********地面统计查询列表导出结束!**************");} catch (Exception e) {e.printStackTrace();}finally {if (outputStream != null) {outputStream.close();}}}

4.配置类

public class ExcelConstants {//一个sheet装100w数据public static final Integer PER_SHEET_ROW_COUNT = 1000000;//每次查询20w数据,每次写入20w数据public static final Integer PER_WRITE_ROW_COUNT = 200000;
}

至此就完成导出。

使用EasyExcel实现excel导出,支持百万大数据量导出-----超简单相关推荐

  1. 大数据导出excel大小限制_大数据量导出Excel的方案

    测试共同条件: 数据总数为110011条,每条数据条数为19个字段. 电脑配置为:P4 2.67GHz,1G内存. 一.POI.JXL.FastExcel比较 POI.JXL.FastExcel均为j ...

  2. 大数据导出excel大小限制_EXCEL大数据量导出的解决方案

    将web页面上显示的报表导出到excel文件里是一种很常见的需求.润乾报表的类excel模型,支持excel文件数据无失真的导入导出,使用起来非常的方便.然而,当数据量较大的情况下,excel本身的支 ...

  3. Excel文件导出总结,包含大数据量的分批导出方式

    文章目录 需求背景 参考内容 导出方式 代码实现 Excel4J 普通导出 POI原生方式 普通导出 大数据量分批导出 依赖版本 实现思路 POI工具类 数据写入 调用测试 测试结果 一个小意外 Ea ...

  4. java百万级大数据量导出

    java实现百万级大数据量导出 实现方式一 一,分析 excel导出如果数据量过大,会出现两个内存溢出的问题 查绚数据量过大,导致内存溢出(可通过分批查绚解决) 下载的时候大EXCEL转换的输出流内存 ...

  5. EasyExcel 分Sheet实现大数据量导出

    EasyExcel 分 Sheet 实现大数据量导出 [场景]平台用户导出数据量达 w 级别的数据时界面白屏或按钮无响应. [解决方案]做异步导出,用户触发点击时创建导出消息并开启单独线程处理导出,处 ...

  6. java大数据量导出csv文件并压缩

    java大数据量导出csv文件并压缩 java使用POI大数据量导出excel一般会存在以下几个问题: 一次从数据库查询出这么大数据,查询缓慢 查询数据量过大时会内存溢出 解决方案:分页查询数据,比如 ...

  7. Java 使用 POI 操作 Excel(反射,大数据量)

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

  8. 数据蒋堂 | 这个产品能支持多大数据量?

    作者:蒋步星 来源:数据蒋堂 本文共500字,建议阅读5分钟.似乎是支持数据量越大,产品就越厉害. 经常有用户会问这个问题,你家的产品能处理多大数据量?似乎是这个值越大产品就越牛. 这个问题,其实没多 ...

  9. 使用bcp进行大数据量导出导入

    SQL Server的导出导入方式有:在SQL Server中提供了导入导出的界面操作. --还没有解决的问题  --1:使用BCP命令时如果导出的字段为空想替换为其它描述(比如替换成NULL)如何办 ...

最新文章

  1. 操作系统课程设计--使用多线程模拟时间片轮转法调度
  2. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
  3. css关键字unset
  4. vim插件ctags的安装和使用
  5. 牛客小白月赛6 A 鲲
  6. SonarQube 7.7默认数据库连接方法
  7. mysql innodb远程备份_详细说明MySQL备份、还原、innoDB打开
  8. python自定义事件event的含义_pyqt自定义事件学习出现问题
  9. leetcode454. 四数相加 II
  10. 笔记本散热不好怎么办
  11. 【Elastic知识简报】standard analyzer和standard tokenizer有什么区别?
  12. AD19 keepoutlayer相关
  13. 产品经理需要具备哪些素质?
  14. 【数据堂开放数据】活体检测数据免费开放
  15. 支付宝 app支付 沙盘使用
  16. python做股票系统_GitHub - jiuweng/stock: stock,股票系统。使用python进行开发。
  17. el-select下拉框不同证件类型校验思路
  18. 人人网2015研发笔试卷C
  19. 会考access数据库操作题_信息技术学业水平考试操作题必备!!!
  20. css特效文件,CSS样式特效演示文件修改版.ppt

热门文章

  1. 解析华为MAS EIE系统硬件与软件结构
  2. cad制图与计算机方面的联系,计算机与CAD制图理论知识.doc
  3. MLY -- 14.Evaluating multiple ideas in parallel during error analysis
  4. [附源码]计算机毕业设计JAVA 停车场管理系统
  5. Mac Eclips安装Activiti Designer插件
  6. 计算机打不开网络共享,电脑的网络和共享中心打不开,网络发现又没打开,..._网络编辑_帮考网...
  7. php执行shell脚本
  8. 前端从一只小白到工作半年的心路历程
  9. 电脑操作手机scrcpy软件
  10. 已知含税单价、税率、数量,计算不含税单价、不含税金额、税额