Java中Excel高效解析工具EasyExcel的实践
作者:心城以北 发布时间:2023-05-28 13:36:38
标签:java,easyexcel,解析
参考资料:alibaba-easyexcel.github.io
简介
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
maven 依赖如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
读 Execl 实践
数据读取代码如下:
先获取文件流,比如 test-data.xls;
SkuModel是一个解析类;
SkuModelReadListener中进行读取到的数据处理。
InputStream excelStream = ExcelToolMain.class.getClassLoader().getResourceAsStream("test-data.xls");
EasyExcel.read(excelStream, SkuModel.class, new SkuModelReadListener()).sheet().doRead();
写 Execl 实践
写数据代码如下:
首先我们需要设定写入文件的文件名
然后设置写入的数据类 SkuModel.
data() 是用来获取数据的,其实就是返回,构建一个 List<SkuModel> 数据集合。
String fileName = ExcelToolMain.getPath() + "write" + System.currentTimeMillis() + ".xlsx";
EasyExcel.write(fileName, SkuModel.class).sheet().doWrite(data());
模板填充
为了解决 excel 模板样式的支持,我们可以使用模板方式来进行数据填充:
模板样式如下:
填充的效果如下:
代码如下:
// 文件名
String fileName = ExcelToolMain.getPath() + "fillOps" + System.currentTimeMillis() + ".xlsx";
// 数据对象
FillData fillData = new FillData();
fillData.setName("张三");
fillData.setNumber(5.2);
// 写入
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);
文件追加
文件追加,感觉在 EasyExcel 中其实是一个流的多写,最后写完后关闭。代码如下:
ExcelWriter excelWriter = null;
try {
// 这里 需要指定写用哪个class去写
excelWriter = EasyExcel.write(fileName, SkuModel.class).build();
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcel.writerSheet(sheet).build();
for (int i = 0; i < 5; i++) {
// 分页多次写
excelWriter.write(data(), writeSheet);
}
} finally {
// 一定要 finish,表示文件写完毕,会关闭流
excelWriter.finish();
}
来源:https://juejin.cn/post/7089457416378679332


猜你喜欢
- DrawerLayout顾名思义就是一个管理布局的。使用方式可以与其它的布局类类似。DrawerLayout带有滑动的功能。只要按照draw
- 前言我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息。虚拟机把描述类的数据从Class文件加载到
- 如何在多线程中使用随机数生成器(Random)避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致
- C# 中闭包(Closure)详解这个问题是在最近一次英格兰 Brighton ALT.NET Beers 活动中提出来的。我发现,如果不用
- <profiles> <profile> <
- 写在前面:可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答,那就是编写一个基于socket的聊天程序,正好最近刚用s
- 【1】首先我们定义一段假数据,这里以一个string为例字static void Main(string[] args){string da
- JVM自带的类加载器:其关系如下:其中,类加载器在加载类的时候是使用了所谓的“父委托”机制。其中,除了根类加载器以外,其他的类加载器都有且只
- Android Studio 运行后出现了下面的错误Emulator: Process finished with exit code 1E
- 背景看完本章,你将会学习到用ASM的tree api进行对匿名线程的hook操作,同时也能够了解到asm相关的操作和背景知识介绍!对于ASM
- 本文实例讲述了Android解析Intent Filter的方法。分享给大家供大家参考。具体分析如下:匿名性质的运行时绑定使得理解Andro
- 本文实例讲述了C#实现带百分比的进度条功能。分享给大家供大家参考,具体如下:功能需求:如果程序中会执行一个耗时的计算过程,我想在用户点击按钮
- break和continue的说明break 循环结构,一旦执行,就结束(或跳出)当前循环结构,此关键字的后面,不能
- 本文实例为大家分享了Android实现仿网易音乐唱片播放效果的具体代码,供大家参考,具体内容如下效果图: 在values中创建attrs.x
- 内容:1、滑动优化(滑动时不加载图片,停止才加载)2、第一次进入时手动加载代码如下:1、界面布局<?xml version="
- 1. 启动入口本系列RocketMQ4.8注释github地址,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈前面我们已经分析完
- 本文实例讲述了Android开发之搜索框SearchView用法。分享给大家供大家参考,具体如下:介绍:SearchView时搜索组件,可以
- 用户User的注册类型有Super和Common两种public eumn RegistrationType{ &nb
- 前言本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友
- 一、业务背景有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。二、分析流程