开发中经常会设计到 excel 的处理,如导出 Excel,导入 Excel 到数据库中!
本文章转自狂神老师,仅作为个人笔记使用。
概述
常用信息
1、将用户信息导出为 excel 表格(导出数据….)
2、将 Excel 表中的信息录入到网站数据库(习题上传….)
开发中经常会设计到 excel 的处理,如导出 Excel,导入 Excel 到数据库中!
操作 Excel 目前比较流行的就是 Apache POI
和 阿里巴巴的 easyExcel
!
Apache POI
Apache POI 官网:https://poi.apache.org/
easyExcel
easyExcel 官网地址:https://github.com/alibaba/easyexcel
EasyExcel 是阿里巴巴开源的一个 excel 处理框架,以使用简单、节省内存
著称。
EasyExcel 能大大减少占用内存的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
下图是 EasyExcel 和 POI 在解析 Excel 时的对比图。
官方文档:https://www.yuque.com/easyexcel/doc/easyexcel
POI-Excel 写
创建项目
1、创建普通 Maven 项目 poi-study
2、引入 pom 依赖
1 | <dependencies> |
03 | 07 版本的写,就是对象不同,方法一样的!
需要注意:2003 版本和 2007 版本存在兼容性的问题!03版本最多只有 65536 行!07版本没有限制
里面有这样几个对象:
1、工作簿
2、工作表
3、行
4、列
03 版本
1、新建一个 ExcelWriteTest 类
2、编写测试方法
1 | String PATH = "E:\\workspace_idea\\SpringBoot_Study_KS\\poi-study"; |
07 版本
1 |
|
注意对象的一个区别,文件后缀!
大文件写 HSSF
缺点:
03 版本最多只能处理 65536 行,否则会抛出异常
1 | java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) |
优点:
过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快
1 |
|
大文件写 XSSF
缺点:
写数据时速度非常慢,非常耗内存,也会发生内存溢出,如 100 万条
优点:
可以写较大的数据量,如 20 万条
1 |
|
大文件写 SXSSF
优点:
可以写非常大的数据量,如 100 万条甚至更多条,写数据速度快,占用更少的内存
注意:
过程中会产生临时文件,需要清理临时文件
默认有 100 条记录被保存在内存中,如果超过这数量,则最前面的数据被写入临时文件
如果想自定义内存中数据的数量,可以使用 new SXSSFWorkbook ( 数量 )
1 |
|
SXSSFWorkbook-来至官方的解释:
实现“BigGridDemo”策略的流式 XSSFWorkbook 版本。
这允许写入非常大的文件而不会耗尽内存,因为任何时候只有可配置的行部分被保存在内存中。
请注意,仍然可能会消耗大量内存
,这些内存基于您正在使用的功能,例如合并区域,注释……仍然只存储在内存中,因此如果广泛使用,可能需要大量内存。
再使用 POI 的时候!内存问题 Jprofile!
POI-Excel 读
03 版本
1 |
|
07 版本
1 |
|
注意获取值的类型即可
读取不同的数据类型
最麻烦的就是这里了!
1 |
|
注意,类型转换问题.
计算公式 (了解即可!)
1 |
|
EasyExcel 操作
导入依赖
1 | <!--easyexcel--> |
写入测试
https://www.yuque.com/easyexcel/doc/read
创建对象
1 |
|
拿到实体类里的值
1 | String PATH = "E:\\workspace_idea\\SpringBoot_Study_KS\\poi-study"; |
将 list 写入 Excel
1 | // 根据list 写入excel |
读取测试
https://www.yuque.com/easyexcel/doc/read
创建对象
监听器
1 | // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去 |
持久层
1 | public class DemoDAO { |
测试代码
1 |
|
固定套路:
1、写入,固定类格式进行写入
2、读取,根据监听器设置的规则进行读取!
小结
了解,面向对象的思想,学会面向接口编程!
理解使用测试 API!
发布时间: 2020-12-24
最后更新: 2024-06-24
本文标题: POI及EasyExcel一小时搞定通俗易懂
本文链接: https://blog-yilia.xiaojingge.com/posts/e720af38.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
