点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

每天 14:00 更新文章,每天掉亿点点头发...

源码精品专栏

  • 原创 | Java 2021 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:blog.csdn.net/weixin_47343544

/article/details/127398545

  • 1、常用类

  • 2、读取时的注解

    • @ExcelProperty

    • @ExcelIgnore

    • @DateTimeFormat

    • @NumberFormat

    • @ExcelIgnoreUnannotated

  • 总结


思考逻辑:

  1. 了解一下Excel单表最多存储多少行数据(可以存储1048576条数据,1024的平方,2的20次方)。

  2. 知道最多多少行就能以这个数为条件,如果超过则进行分表。

  3. 分表的同时需要对数据进行分割,才能不超过最大限度。

注: 这就是简单的demo,有关于自己项目中的逻辑自己加。

实体类(非常简单,为了导出表更快)

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

测试类

//进行分表demo
@Test
public 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。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

2、读取时的注解

@ExcelProperty

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

可选属性:

注:index属性可以指定当前字段对应excel中的哪一列,可以根据列名value去匹配,也可以不写。

如果不使用@ExcelProperty注解,成员变量从上到下的顺序,对应表格中从左到右的顺序;

要么全部不写,要么全部用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 注解将不会参与读写。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

总结

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



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)

EasyExcel 导出数据超过 Excel 单表上限了,该怎么办???相关推荐

  1. EasyExcel导出数据超过Excel单表上限时进行分表

    解决的问题 Excel单表最多可以存储1048576条数据 如果超过这个多条数据则进行Excel分表. 分表的同时需要对数据进行分割,来保证不超过Excel最大存储条数. 实体类(测试用,非常简单) ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 从DataTable高效率导出数据到Excel

    首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: 1 using Microsoft.Office ...

  9. Java导出数据到Excel文件

    Java导出数据到Excel文件 前言 如何导出 导出的基本流程 测试结果 测试数据及结果 测试代码 ExcelExportUtil.class 遇到的问题 lombok的问题 解决 Cell.set ...

最新文章

  1. 关于“SEO五条金律”的解说
  2. 【caffe-windows】全卷积网络特征图分析
  3. linux 下安装JDK
  4. Docker添加或者更改容器的端口映射
  5. RuntimeError: size mismatch, m1: [80 x 4], m2: [320 x 50] at ..\aten\src\TH/generic/THTensorMath.cpp
  6. 66元机票盲盒,去哪随机、日期随机:要不起!
  7. cookie 以及session 的使用
  8. Ionic开发App中重要的部分
  9. 如果背单词,可能需要的参考辞典...
  10. 内连接和外联结连接的区别
  11. Matlab图例legend换行
  12. SSH使用PEM文件登录
  13. Mac版PhotoShop 2020 最新版下载
  14. 实验一 作业管理系统的总结与期望
  15. java gc 命令_Java 查看系统GC命令介绍
  16. python你好世界_你好,世界! Python方式
  17. 跨终端游戏平台:腾讯START云游戏 for Mac
  18. lsnrctl监听器的启动和关闭
  19. 谁“偷”走了我的雨伞
  20. 2016 iherb 图文海淘攻略

热门文章

  1. Reveal 一个让你开发事半功倍的工具
  2. SAP AMDP调试
  3. 行为金融学解释投资者的认知局限
  4. 荣耀九x什么时候升级鸿蒙系统,好消息!荣耀9X年内将全部升级华为鸿蒙操作系统...
  5. PCL 惯性矩和偏心率
  6. 三维绘图matlab实验报告,matlab实验报告-二维绘图
  7. 图片的1px间隙、字间距、文字竖排 _CSS
  8. 微信小程序自定义图标动态显示不同颜色
  9. element中Dialog和MessageBox弹框按钮和关闭图标样式修改
  10. JSP 人力资源管理系统 软件开发设计 myeclipse开发 mysql数据库