二、使用阿里的easyExcel进行导入导出
0.pom文件中使用的依赖
我用的是如下的版本,低版本的需要重写6个方法,新版的需要重写两个,新版本中其余4个转成了静态方法,不需要重写了。
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>
1.导入
1.0 需求场景
将excel中的数据导入导数据库中,在导入之前,会根据校验规则每列的数据进行校验,如果一行数据校验全部成功,那么插入到数据库中,这一行数据表示导入成功;如果一行数据中有数据不符合校验规则,那么这条数据不入库,并且写入到新的excel中,在excel中加入一列,错误的原因,将excel放到云服务器的oss中。本例子中的服务结构是web层通过dubbo调用service层。
1.1准备工作
首先准备需要导出的实体对象,如下:
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;@Getter
@Setter
@EqualsAndHashCode
public class SkuItem implements Serializable {private static final long serialVersionUID = 1045701549245952199L;/*** 申请id*/@ExcelProperty(index = 0, value ="申请id")private String applicationId;/*** 商品名称*/@ExcelProperty(index = 1, value ="商品名称")private String skuName;/*** 商品id*/@ExcelProperty(index = 2, value ="商品id")private String skuNo;/*** 商品售价 BigDecimal*/@ExcelProperty(index = 3, value ="商品售价")private String skuPrice;/*** 错误原因*/private String errorReason;}
在controller层,前端传文件给服务端,服务端使用对象MultipartFile file进行接受;
并且使用下列代码解析每一行excle数据,并处理逻辑:
EasyExcel.read(file.getInputStream(), SkuItem.class, new ReadListener<SkuItem>() {@Overridepublic void invoke(SkuItem skuItem, AnalysisContext analysisContext) {}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}
如果是通过dubbo调用后面的服务,那么建议将数据放到一个list中,而不是每一行都去调用dubbo服务。每一行都去调用一次服务,会影响性能。所以在本例中,可以在解析每一行execl的时候,将数据存到一个list中,然后使用
List<List<CooperativeOrderItemDTO>> partition = Lists.partition(dtoList, 1000);
然后遍历partition ,每次去调用dubbo,这样会提升服务性能。校验可以放在service层。
2.导出
2.1准备工作
导出的实体
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.io.Serializable;
import java.math.BigDecimal;/*** @Author Chuntao Yang* @Date 2021/10/29*/
@Data
public class ExcelEntity implements Serializable {private static final long serialVersionUID = -8415065232914507009L;@ExcelProperty(value = {"订单ID"})private Long id;/*** 商城订单号*/@ExcelProperty(value = {"SAAS商城订单号"})private String storeOrderNo;/*** 租户名称*/@ExcelProperty(value = {"租户名称"})private String tenantName;/*** 订单创建时间*/@ExcelProperty(value = {"下单时间"})private String orderCreateTime;}
controller层导出的时候需要的参数,HttpServletResponse response,主要是为了指定导出的一些数据格式,比如:
String fileName = System.currentTimeMillis() + ".xlsx";response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName);response.setHeader("responseType", "blob");
然后使用如下代码进行导出:
List<ExcelEntity> list= Lists.newArrayList();
...
list.add(entity);
...
EasyExcel.write(response.getOutputStream(), ExcelEntity.class)
.sheet("entity")
.doWrite(list);
EasyExcel导入导出数据大致流程就是这样。
二、使用阿里的easyExcel进行导入导出相关推荐
- 阿里开源 EasyExcel(Excel导入导出 推荐使用)
二.阿里开源 EasyExcel 使用可以直接看(点击)官方文档 github地址:(https://github.com/alibaba/easyexcel Java解析.生成Excel比较有名的框 ...
- 使用EasyExcel实现导入导出功能
使用EasyExcel实现导入导出功能 一.导出 1.使用ideal新建一个maven项目,并在pom.xml文件中引入EasyExcel依赖 <!--easyexcel实现导入导出--> ...
- java使用EasyExcel实现导入导出几种方式(导入、模板导出、和不需要模板的导出)
java通过EasyExcel实现导入导出(导入.模板导出.和不需要模板的导出) 此文章只是涉及到简单的导入导出 通过实体模板导入数据 无实体模板导入数据 导出数据 通过模板导出数据 使用到的mave ...
- EasyExcel 模板导入导出
一.环境 1.开发工具:idea2018.1 2.jar 管理:maven 3.3.3 3.项目类型:springboot 二.pom.xml <?xml version="1.0&q ...
- 自从用了 EasyExcel,导入导出 Excel 更简单了!
EasyExcel 在做excel导入导出的时候,发现项目中封装的工具类及其难用,于是去gitHub上找了一些相关的框架,最终选定了EasyExcel.之前早有听闻该框架,但是一直没有去了解,这次借此 ...
- SpringBoot整合easyexcel实现导入导出
一.excel读写测试 1.导入依赖 <properties><easyexcel.version>2.2.0-beta2</easyexcel.version> ...
- 玩转POI、EasyExcel报表导入导出!
POI.EasyExcel报表导出 前言 一.POI操作Excel 1.1 导入依赖包 1.2 编写测试代码: 1.3 03和07版本的区别 二.大文件写入 2.1 大文件写HSSF 2.2 大文件写 ...
- 使用easyExcel批量导入导出数据
excel在工作中比较常用了,对于需要批量导入的需求,一般都是使用excel.excel导入常用poi,但是POI使用繁琐,而且对内存消耗大,这篇文章就是使用easyexcel来解析数据 场景一:将数 ...
- 使用VUE+SpringBoot+EasyExcel 整合导入导出demo
导出示例: 后台: 1.引入依赖:需要引入easyExcel的依赖,但是我在使用过程中发现也是需要poi的依赖,不然会报错,就同时引入了. <dependency><groupId& ...
最新文章
- PHP设计模式:观察者模式
- IntelliJ IDEA 2020.2 EAP 5 发布:完美支持Java 15
- 关于“VCL已死、RAD已死”答读者问
- mac mysql-python 失败_MAC OS安装MySQL-python总是失败,请帮忙看看什么原因?
- Java基础篇:如何使用instanceof
- Hive中文件存储格式及大小比较测试
- 保护隐私型浏览器Tor发布安卓试用版
- opencv实现超像素分割(slic实现)
- 联邦学习 OR 迁移学习?联邦迁移学习不香吗
- python 中sample是什么_python中的sample什么意思
- FIT/WeFIT 开发者冯华君采访
- Absolute Enable Right Click Copy 简单快速解除滑鼠右键使用限制
- 语音控制Office,这个功能一定要体验
- 重复照片查找软件Duplicate Photos Sweeper Mac
- 移动魔百盒问题之我见
- html制作不均匀表格,HTML自定义JUnit报告不均匀表格对齐
- 【算法】958- 动图演示:彻底理解红黑树?
- 美术-图片建模一键生成对称模型
- unity实时渲染部分
- VB在招标代理业务中的运用-招标采购小帮手
热门文章
- 如何认识区分轻重缓急以及自我定位
- 西部数码服务器怎么导入mysql_虚拟主机怎么导入数据库
- python shelve模块_python之shelve模块
- spi通信c语言发送32字节数据,AVR单片机SPI通讯实例程序 (C - ARM - 电子发烧友网
- 【Windows 应用程序开发详解】四.Windows开发基本概念和相关术语(一)
- LIN总线协议详解5(网络管理)
- 饥荒联机版服务器搭建_TGP饥荒联机版专用服务器怎么搭建?专用服务器搭建方法...
- 图上的机器学习系列-聊聊struc2vec
- 题7.16:写一个函数,输人一个十六进制数,输出相应的十进制数。
- html怎么做一个正方形,纯 CSS 实现自适应正方形