导入:

下面是从http请求流中读取数据流,其他形式的数据流道理相同;

逻辑代码:

    @PostMapping(value = "import", consumes = "multipart/*", headers = "content-type=multipart/form-data")public String import(MultipartHttpServletRequest request) {log.info("import批量录入数据开始");String fileName="";try {Map<String, MultipartFile> fileMap = request.getFileMap();for (Map.Entry<String, MultipartFile> part : fileMap.entrySet()) {InputStream inputStream = part.getValue().getInputStream();fileName=part.getValue().getOriginalFilename();Boolean isExcel = FileUtil.isExcelFile(fileName);//就是判断下扩展名是不是xls、xlsx;if (!isExcel) {throw new ValidateException("导入的文件不是excel文件");}List<Data> data = new LinkedList<>();EasyExcel.read(inputStream).head(Data.class).autoTrim(true).registerReadListener(new AnalysisEventListener<ByteArea>() {@Overridepublic void invoke(Data data1, AnalysisContext analysisContext) {data.add(data1);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("读取文件[{}]成功,一共:{}行......", part.getKey(), data.size());}}).doReadAll();//读取所有的sheet;importService.import(data);}} catch (Exception e) {log.error("批量录入数据异常", e);return "批量录入数据异常";}return "批量录入数据正常";}

类的属性注解中的value要和Excel列头的名字相同,保证Excel数据可以映射到对象的属性中:

导出相关常用API

注解ExcelProperty 指定写到第几列,默认根据成员变量排序。value指定写入的名称,默认成员变量的名字。ExcelIgnore 默认所有字段都会写入excel,这个注解会忽略这个字段。DateTimeFormat 日期转换,将Date写到excel会调用这个注解。里面的value参照java.text.SimpleDateFormat。NumberFormat 数字转换,用Number写excel会调用这个注解。里面的value参照java.text.DecimalFormat。

EasyExcel相关参数needHead 监听器是否导出头。useDefaultStyle 写的时候是否是使用默认头。head 与clazz二选一。写入文件的头列表,建议使用class。autoTrim 字符串、表头等数据自动trim。sheetNo 需要写入的编码。默认0。sheetName 需要些的Sheet名称,默认同sheetNo。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Data implements Serializable {/*** 区域id*/@ExcelProperty("areaCode")private String areaCode;/*** 区域名称*/@ExcelProperty("areaName")private String areaName;/*** 父级id*/@ExcelProperty("fatherId")private String fatherId;/*** 级别*/@ExcelProperty("level")private Integer level;
}

POM依赖引入:

<properties><easyExcel.version>2.2.6</easyExcel.version>
</properties>
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyExcel.version}</version>
</dependency>

导出:

下面是导出的核心部分代码,可根据实际场景进行调整代码

ByteArrayOutputStream os = new ByteArrayOutputStream();
ExcelWriter excelWriter = EasyExcel.write(os).build();
WriteSheet writeSheet = EasyExcel.writerSheet("第" + (i - 1) + "部分").build();
excelWriter.write(page.getResult(), writeSheet);
excelWriter.finish();
os.close();

总结

可以看出不管是excel的读取还是写入,都是一个注解加上一行代码完成,可以让我们少些很多解析的代码,极大减少了重复的工作量。当然这两个例子使用了最简单的方式,EasyExcel还支持更多场景,例如读,可以读多个sheet,也可以解析一行数据或者多行数据做一次入库操作;写的话,支持复杂头,指定列写入,重复多次写入,多个sheet写入,根据模板写入等等。更多的例子可以去参考EasyExcel官方文档https://www.yuque.com/easyexcel/doc/easyexcel

EasyExcel的导入和导出相关推荐

  1. 手把手教你如何玩转EasyExcel的导入和导出

    小蜗牛,今天爬了多远?不急,继续爬总会到达终点. 朋友们,今天学习了多久?别慌,保持学习才会看到更好的自己. 觉得我的文章还不错的,欢迎大家还可以关注我的微信公众号:Java菜鸟进阶之路 最近会写一个 ...

  2. 阿里巴巴的EasyExcel(导入和导出)

    EasyExcel特点 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发上来 ...

  3. 教您如何三分钟搞定EasyExcel导入与导出功能

    文章目录 目录 前言 一.EasyExcel是什么? 二.使用步骤 1.引入库 2.导入 2.1创建对应excel表格的实体类 2.2后端接收请求入口 2.3业务处理 2.4监听器处理数据 3.导出 ...

  4. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  5. 玩转POI、EasyExcel报表导入导出!

    POI.EasyExcel报表导出 前言 一.POI操作Excel 1.1 导入依赖包 1.2 编写测试代码: 1.3 03和07版本的区别 二.大文件写入 2.1 大文件写HSSF 2.2 大文件写 ...

  6. 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出

    目录 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出 一.导入和导出 二.导出数据为excel实现过程 三.将excel中的数据导入到数据库中 基于SpringB ...

  7. 使用POI和EasyExcel实现Excel导入和导出功能

    需求场景 开发中经常会设计到excel的处理,需求场景如下所示: 1.将用户信息导出为excel表格(导出数据) 2.将Excel表中的信息录入到数据库中(导入数据) 操作Excel目前比较流行的就是 ...

  8. 使用EasyExcel实现导入导出功能

    使用EasyExcel实现导入导出功能 一.导出 1.使用ideal新建一个maven项目,并在pom.xml文件中引入EasyExcel依赖 <!--easyexcel实现导入导出--> ...

  9. 使用easyexcel进行excel的导入和导出(web)

    使用easyexcel进行excel的导入和导出(web) 前言:使用springboot,mybatis,excel3.x.x,通用mapper.本文主要演示怎么使用easyexcel,因此先展示效 ...

最新文章

  1. hadoop map reduce自定义数据类型时注意顺序,否则报错。
  2. Oracle database 安装在 Linux(rhel,oel,centos)上的用户设置
  3. 【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )
  4. 移动互联网时代的信息安全与防护_移动互联网时代,草根创业还有哪些机会?...
  5. PostgreSQL 前世今生
  6. 【Linux服务器初上手】MobaXterm/系统版本/hostname/hosts/yum源配置/jdk/docker(不断完善)
  7. hive - 解析 json
  8. WPF TreeView 相关技巧
  9. 监控管理平台 OpenNMS
  10. 计算机关键性检测的部件是,试论计算机硬件关键技术的若干问题分析
  11. NHibernate教程(14)--使用视图
  12. ASCII码表_全_完整版
  13. java实现文章伪原创_网站伪原创的方法 - 百度搜狗360神马网站快速排名 - OSCHINA - 中文开源技术交流社区...
  14. Java IO流:(十二)NIONIO2简单介绍
  15. 【怎么卸载影子系统?卸载影子系统解决方法】
  16. 英特尔oneAPI——异构计算学习总结
  17. 中国第三方支付系统目前存在的问题
  18. linux 系统迁移到固态硬盘,Linux系统迁移记录(从HDD到SSD)
  19. 社交网络的致瘾性设计如何夺走我们的时间?
  20. 【学习计算机组成原理】浮点数的加减运算

热门文章

  1. 如何写学术论文的rebuttal?
  2. Android ORM框架GreenDao用法
  3. Office 2008 for Macintosh: The Missing Manual
  4. Looksery Cup 2015 F. Yura and Developers(单调栈+二分+分治)(难*)
  5. 超好玩的不怕被和谐的方法发资源
  6. 线扫相机DALSA-Image Format(读图格式设置)
  7. Cutting Chains UVA - 818
  8. 【研究生本科】如何与导师有效沟通你的论文选题?
  9. java学习第十八天
  10. [无私分享]最新网盘资源搜索站点