解决的问题

  1. Excel单表最多可以存储1048576条数据
  2. 如果超过这个多条数据则进行Excel分表。
  3. 分表的同时需要对数据进行分割,来保证不超过Excel最大存储条数。

实体类(测试用,非常简单)

 @ToString@Data@NoArgsConstructor@AllArgsConstructorpublic class Student {@ExcelProperty(value = "学生年龄")private int age;}

测试类

    //进行分表demo@Testpublic void TestWrite() {//获取要导出的数据List<Student> fillData = initFillData();//获取一共多少条数据int totalCount = fillData.size();String fileName = "学生信息报告.xlsx";//单表最多存储数int sheetMaxNum = 1048576;ExcelWriter excelWriter = null;// 如果总数超出单个sheet的大小 1048575 则进行分页if (totalCount > sheetMaxNum) {excelWriter = EasyExcel.write(fileName, Student.class).build();// 设置的单个Sheet的数据量,必须小于1048576,int pageSize = 1048575;//要分表的页数int sheetCount = 0;//如果能整除则为整除的数if (totalCount % pageSize == 0){sheetCount = totalCount / pageSize ;}else{//如果不能整除则+1sheetCount = (totalCount / pageSize) + 1 ;}int num = 0;//进行循环分表for (int pageNum = 1; pageNum <= sheetCount; pageNum++) {WriteSheet writeSheet = EasyExcel.writerSheet(pageNum, "学生信息Sheet表_" + pageNum).head(Student.class).build();int fromIndex = pageSize * pageNum;if (fromIndex >= totalCount) {fromIndex = totalCount;}//将数据进行分组excelWriter.write(fillData.subList(num, fromIndex), writeSheet);num = fromIndex ;}} else { // 不超出则一次性全部导出excelWriter = EasyExcel.write(fileName, Student.class).build();WriteSheet writeSheet = EasyExcel.writerSheet("学生信息表").head(Student.class).build();excelWriter.write(initFillData(), writeSheet);}excelWriter.finish();}//提供两百万条数据private static List<Student> initFillData() {ArrayList<Student> fillDatas = new ArrayList<Student>();for (int i = 2; i < 2000000; i++) {Student fillData = new Student();fillData.setAge(i);fillDatas.add(fillData);}return fillDatas;}

1、常用类

  • EasyExcel 入口类,用于构建开始各种操作;
  • ExcelReaderBuilder 构建出一个ReadWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
  • ExcelWriterBuilder 构建出一个WriteWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
  • ExcelReaderSheetBuilder 构建出一个ReadSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
  • ExcelWriterSheetBuilder 构建出一WriteSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
  • ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据,我们可以把调用service的代码可以写在其invoke方法内部;
  • WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据,对使用者透明不可见;
  • 所有配置都是继承的 Workbook的配置会被Sheet继承。所以在用EasyExcel设置参数的时候,在EasyExcel…sheet()方法之前作用域是整个sheet,之后针对单个sheet。

2、读取时的注解

@ExcelProperty

使用位置:标准作用在成员变量上

可选属性

属性名 含义 说明
index 表示字段放置第几列 索引。默认-1,建议指定时从0开始
value 对应Excel表中的列头 名称
converter 成员变量转换器 自定义转换器需要实现Converter接口

注:

  1. index属性可以指定当前字段对应excel中的哪一列,可以根据列名value去匹配,也可以不写。
  2. 如果不使用@ExcelProperty注解,成员变量从上到下的顺序,对应表格中从左到右的顺序。
  3. 要么全部不写,要么全部用index,要么全部用名字去匹配,尽量不要三个混着用。

代码演示:

// 1. 修改成员变量顺序读取Excel表格
// 2. 修改index属性值读取Excel表格
// 3. 修改value属性值读取Excel表格
@ExcelProperty(value = "学生姓名",index = 3)
private String name;

@ExcelIgnore

标注在成员变量上,默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
代码演示

// 4. 忽略id成员变量值读取Excel表格,在excel中不会显示。
@Excellgore
private String id;

@DateTimeFormat

标注在成员变量上,日期转换,代码中用String类型的成员变量去接收excel中日期格式的数据会调用这个注解。里面的value参照java.text.SimpleDateFormat

// 5. 按照指定的格式写入Excel内容
//只显示年月日
@DateTimeFormat("YYYY-MM-dd")
private Date birthday;

@NumberFormat

标注在成员变量上,数字转换,代码中用String类型的成员变量去接收excel数字格式的数据会调用这个注解。里面的value参照java.text.DecimalFormat

@ExcelIgnoreUnannotated

**注:**标注在类上。
不标注该注解时,默认类中所有成员变量都会参与读写,无论是否在成员变量上加了@ExcelProperty 的注解。
标注该注解后,类中的成员变量如果没有标注@ExcelProperty 注解将不会参与读写。

需要加入Easyexcel依赖包

<!-- easyExcel依赖 -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version>
</dependency>

说明:这是简单的demo,没有关于项目逻辑的,有关项目的自己加就ok了。希望对您有帮助,感谢阅读

EasyExcel导出数据超过Excel单表上限时进行分表相关推荐

  1. EasyExcel 导出数据超过 Excel 单表上限了,该怎么办???

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  2. EasyExcel导出数据到Excel,浏览器提供下载

    最近的一个项目需求,需要为用户提供一个导出数据功能,点击批量下载按钮,将所选中的数据导入到Excel文档中供用户下载.如下图 点击批量下载报告后,浏览器提供下载功能 下面提供一下实现该功能的思路  后 ...

  3. mysql订单表上亿怎么分表_[转]单表上亿的数据量如何分表

    之前的几篇关于分表的,提到的分表策略不够详细,我在这篇中补充一些分表策略吧: 按号段分: (1) user_id为区分,1-1000的对应table1,1001-2000的对应table2,以此类推, ...

  4. nodejs mysql 分表_数据库分库分表学习

    大型网站数据库分库分表 分库分表方案: 垂直&水平 1.什么是垂直拆分? 指的是将一个包含了很多表的数据库,根据表的功能的不同,拆分为多个小的数据库,每个库中包含部分表. .垂直拆分的另外2种 ...

  5. arcengine遍历属性表_【程序之坑】小程序云开发导出数据到excel表

    本文解决了小程序云开发导出数据到excel的bug,并给出了分析的过程,同时简化了程序为一个云函数,一个本地函数,逻辑更简单.文章结尾给出了完整源代码 小程序云开发为没有服务器的小程序开发者提供了便利 ...

  6. JS 打印 data数据_小程序导出数据到excel表

    小程序导出数据到excel表,借助云开发后台实现excel数据的保存 我们在开发小程序的过程中,可能会有这样的需求:如何将云数据库里的数据批量导出到excel表里? 这个需求可以用强大的云开发轻松实现 ...

  7. php上传和导出excel文件,(进阶篇)使用PHP导入Excel和导出数据为Excel文件

    有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入. 1.导入XLS PHP-ExcelReader这是一个 ...

  8. 前端利用JS导出数据到Excel表 数字是文本类型 无法计算

    问题描述:前端利用JS导出数据到Excel表 数字是文本类型 无法进行公式计算:前端利用JS导出数据到Excel表 数字是文本类型 无法计算 解决办法:参考https://bbs.csdn.net/t ...

  9. django 导出数据到excel表 导出excel表到目标路径及客户端下载

    python导出excel表利用的是xlwt模块 学习的网址 大佬教学网址 导出数据到excel表 下面是代码 import os from xlwt import Workbook from inf ...

最新文章

  1. 10w 行级别数据的 Excel 导入优化记录
  2. 第十七届智能车竞赛何时开始呀?
  3. 物联网奇点:给物联网设备使用的Docker
  4. java内部float,Java中的float是什么?
  5. Linux 多线程(二)线程安全:线程安全、互斥与互斥锁、死锁、同步与条件变量
  6. 第34讲:更好用的自动化工具 airtest 的使用
  7. php cli swoole mysql_[了解实践]Swoole、PHP与MySQL:连接池,swoole扩展实现真正的PHP数据库连接池。...
  8. element-ui 可复选树型表格
  9. ElasticSearch的update_by_query使用
  10. ajax authorization,ajax跨域,_ajax Authorization 鉴权失败,ajax跨域 - phpStudy
  11. 音量公式_家庭影院功放功率与音量之间的秘密
  12. 神经网络算法的关键参数,神经网络计算方法
  13. 系统应用修改包名,导致OTA升级后用户数据丢失
  14. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
  15. openfeign集成Hystrix的备选方案处理
  16. 正交设计(收集大牛的文章)
  17. MySQL 自定义stuff函数
  18. python模拟键盘鼠标操作
  19. win7 系统增加自定义分辨率_【文献转载】GT5000便携式多参数土壤呼吸测量系统用于冬小麦田间土壤氧化亚氮释放量的测量...
  20. android与stm32通过esp8266局域网连接并进行通讯

热门文章

  1. 什么是gnome---基本概念介绍(转)
  2. 《区块链信息服务管理规定》重点解读
  3. backbone java_Backbone和Angular Java技术详解
  4. PostgreSQL 14 Tid Range Scan
  5. 含税9.9元包邮——合宙ESP32-C3核心板来了
  6. 文件目录管理命令——touch、mkdir、cp、mv、rm、dd、file、
  7. Docker 基础入门
  8. 大班如果我有机器人教案_幼儿园大班教案《机器人》含反思(通用)
  9. shell 引号 解析 逗号_shell 脚本给逗号分隔的内容添加双引号
  10. MongoDB 使用教程--基本增删改查语法