目录

前言

一、easyexcel是什么?

二、使用步骤

1.添加依赖easyexcel和poi依赖

2.

总结



前言

提示:以下是本篇文章正文内容,下面案例可供参考

一、easyexcel是什么?

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便

二、使用步骤

1.添加依赖easyexcel和poi依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
</dependency>

2.

代码如下(示例):

@RequestMapping("findAll")
@ResponseBody
public Map<String, ? extends Object> findAll(HttpServletRequest request) throws Exception {//查询表数据量int row = xxhtService.getCount();Map<String, Object> modelMap = exportExcel(row,"com.example.exceldemo.entity.Xxht");return modelMap;
}private Map<String, Object> exportExcel(int row,String entity) {Map<String, Object> modelMap = new HashMap<String, Object>(3);long start = System.currentTimeMillis();//分页查询数量int pageSize = 50000;int page = row / pageSize;int dd = row % pageSize;//分页总署int pages = dd == 0 ? page : page + 1;//每个sheet写入最大行数int maxTotal = 500000;ExcelWriter excelWriter = null;String fileName = "";List<String> strings = new ArrayList<>();try {WriteSheet writeSheet = null;for (int i = 0; i < pages; i++) {Map<String, Object> map = new HashMap<String, Object>();map.put("start", pageSize * i);map.put("end", pageSize);logger.info("开始读取{}--{}数据",(pageSize * i),(pageSize * i)+pageSize);List<Xxht> list = xxhtService.findAll(map);//分页查询if(i==0||i%(maxTotal/pageSize)==0){if(i!=0){excelWriter.finish();}fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";strings.add(fileName);excelWriter = EasyExcel.write(fileName, Class.forName(entity)).build();writeSheet = EasyExcel.writerSheet("模板").build();logger.info("文件名称:"+fileName);}excelWriter.write(list, writeSheet);}} catch (Exception e){e.getStackTrace();}finally {// 千万别忘记finish 会帮忙关闭流if (excelWriter != null) {excelWriter.finish();}}long end = System.currentTimeMillis();logger.info("导出excel耗时"+(end - start) / (1000*60)+"分钟"+((end - start) % (1000*60))/1000+"秒");if(strings.size()>0){modelMap.put("success", true);modelMap.put("result", strings.toArray());}else{if(row==0){modelMap.put("success", false);modelMap.put("message", "没有查询到数据,没有生成导出数据!");}else{modelMap.put("success", false);modelMap.put("message", "导出失败!没有生成导出数据!");}}return modelMap;
}

3.导出excel如下


总结

测试数据量1411321,每个excel写入500000数据,共分三个excel

easyexcel分页导出多个excel相关推荐

  1. 基于EasyExcel多线程分页导出excel

    基于EasyExcel多线程分页导出excel Maven依赖 线程池配置 导出代码 第七更,基于EasyExcel 多线程分页导出excel 在项目中,BA要求全量导出表中数据,估计有十几万条,同事 ...

  2. 阿里开源(EasyExcel)---导出EXCEL

    一. 简介 导出是后台管理系统的常用功能,当数据量特别大的时候会内存溢出和卡顿页面,曾经自己封装过一个导出,POI百万级大数据量EXCEL导出 采用了分批查询数据来避免内存溢出和使用SXSSFWork ...

  3. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  4. SpringBoot使用EasyExcel 模板填充数据并导出,以及Excel导入解析入库

    需求 1.导出Excel模板,第一个sheet为用户基本信息,默认只有表头,用户手动填写后续用来导入人员信息.第二个sheet为组织架构信息,默认从数据库查询组织信息,方便用户查询组织编码. 2.导入 ...

  5. java分页导出excel_报表中利用API来实现导出excel列后分页

    在报表中,当统计报表统计的指标非常多,在页面上展现的时候,整个报表会变得非常的长,经常会通过设置滚动条拖拽来查看整个报表,当这时用不分页导出excel后,查看excel中报表被导出到一个sheet中, ...

  6. 基于EasyExcel锁定指定列导出数据到excel

    基于EasyExcel锁定指定列导出数据到excel 大家好,我是llp.最近在做系统报表时中有一个需求时这样的,需要查询系统数据导出excel,并要求导出的excel列中有一些时锁定的有一些时不锁定 ...

  7. Java分页导出Excel文件

    Java分页导出Excel文件 1.开发微信小程序接入广告获取收益 技术: Springboot + mongodb + maven +Layui + thymeleaf 上一篇博客已经讲解了Java ...

  8. 利用EasyExcel完整的springboot +vue前后端导出并下载excel表格

    文章目录 写在前面 正文 1. springboot后端引入easyexcel及使用 1.1 引入依赖 1.2 接口serviceImpl方法 1.3 提供一个对list集合去重的方法(根据相同key ...

  9. EasyExcel第三弹 + hutool-poi 配合使用导出较复杂Excel.xlsx + 计算增长率、同比环比、比重等

    一.回顾 继上次"动态表头easyExcel导入导出(https://blog.csdn.net/qq_37337660/article/details/114680512)", ...

最新文章

  1. android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
  2. bat、sh等批处理文件(脚本文件)
  3. 手机信号放大器 让手机信号增强的办法
  4. Service Mesh服务网格:是什么和为什么
  5. 【.NET深呼吸】基础:自定义类型转换
  6. configure project qt,如何为Qt Framework配置CLion IDE?
  7. python字符串百分号_Python字符串格式化的2种方法
  8. batchnomal_pytorch的batch normalize使用详解
  9. 华平助广东海事局构建水上搜救应急指挥系统
  10. xml2 交叉编译移植
  11. 中兴myos和鸿蒙,继华为鸿蒙系统以后!中兴再次发布新系统MyOS:可媲美苹果
  12. opengl 关于glGenBuffers函数没有定义
  13. 函数重载与函数覆盖的区别(C++)
  14. 对机器学习实战第二章内容的思考
  15. 使用matlab对图像进行二值化处理
  16. 用Python模拟同步时钟
  17. [转]织梦标签全攻略
  18. VIT实战总结:非常简单的VIT入门教程,一定不要错过
  19. 在WINDOWS 10上SQL SERVER如何远程调试防火墙
  20. 2021-10-30

热门文章

  1. Unity官方案例同步学习-学习日记(一)
  2. Kali --VNC连接
  3. javascript功能插件大集合,写前端的亲们记得收藏
  4. 大象转身牵一发动全身,阿里推猫享不仅仅对标京东
  5. git解决冲突的方式
  6. Jupyterlab配置pytorch内核
  7. 真实的上传进度条及优化
  8. python使用xlsx和pandas处理Excel表格的操作步骤
  9. Docker问题解决:Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup regist
  10. make指定makefile文件编译