文章目录

    • 前言
    • 第一步:导入依赖
    • 第二步:创建一个EasyExcelReadListener类,继承easyExcel中的AnalysisEventListener类,实现里面的invoke()和doAfterAllAnalysed()方法
  • 第三步:在controller中分别实现Excel的模板下载,Excel文件上传,以及Excel读取数据库数据并下载。
  • 第四步:启动项目

前言

之前我们都是使用jxl或者poi操作Excel表格,我们本次使用阿里开源的easyExcel对Excel实现上传和下载功能。在本次的演示项目中引入了mybatis-plus依赖,将Excel表格中的数据读取并且写入数据库中。

第一步:导入依赖

<!--        阿里开源easyExcel依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.4</version>
</dependency>

第二步:创建一个EasyExcelReadListener类,继承easyExcel中的AnalysisEventListener类,实现里面的invoke()和doAfterAllAnalysed()方法

/*** @author YLY* @version 1.0* @className EasyExcelReadListener* @date 2020/7/19 11:47*/
@Slf4j
public class EasyExcelReadListener extends AnalysisEventListener<EasyExcelModel> {@Autowiredprivate EasyExcelMapper easyExcelMapper;private List<EasyExcelModel> easyExcelModels = new ArrayList<>();public EasyExcelReadListener(EasyExcelMapper easyExcelMapper) {this.easyExcelMapper = easyExcelMapper;}@Overridepublic void invoke(EasyExcelModel easyExcel, AnalysisContext analysisContext) {log.info("开始读取文章:{}", easyExcel.toString());easyExcelModels.add(easyExcel);}@Transactional(rollbackFor = Exception.class)@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("进入到:doAfterAllAnalysed  方法中");easyExcelModels.forEach(easyExcelModel -> {easyExcelMapper.insert(easyExcelModel);});}
}

其中invoke()方法负责读取Excel中的数据,doAfterAllAnalysed()方法是在读取完成之后执行的方法。

第三步:在controller中分别实现Excel的模板下载,Excel文件上传,以及Excel读取数据库数据并下载。

/*** @author YLY* @version 1.0* @className EasyExcelController* @date 2020/7/19 11:46*/
@Controller
public class EasyExcelController {@Autowiredprivate IEasyExcelService iEasyExcelService;@Autowiredprivate EasyExcelMapper easyExcelMapper;@GetMapping("/tempalte")public void tempalte(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("数据上传模板", "UTF-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(),EasyExcelModel.class ).sheet("数据上传模板").doWrite(new ArrayList<EasyExcelModel>());}@PostMapping("/upload")@ResponseBodypublic String upload(MultipartFile file) throws IOException {EasyExcel.read(file.getInputStream(),EasyExcelModel.class , new EasyExcelReadListener(easyExcelMapper)).sheet().doRead();return "success";}@GetMapping("/download")public void download(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("数据表格下载", "UTF-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), EasyExcelModel.class).sheet("数据表格").doWrite(iEasyExcelService.list());}}

其中EasyExcelModel类为对应数据库的表名,里面存在四个属性值,分别对应数据库的字段名称。 值得注意的是,我是用了lombok,如果不会使用lombok的话,可以将@Data、@NoArgsConstructor 、@AllArgsConstructor、@EqualsAndHashCode 注解删除,然后实现getter/setter方法

/*** @author YLY* @version 1.0* @className EasyExcel* @date 2020/7/19 11:33*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@TableName("easy_excel")
public class EasyExcelModel {@TableId(value = "id", type = IdType.AUTO)@ExcelIgnore  // 下载的Excel的表头中忽略此字段private Long id;@ExcelProperty("姓名") //映射Excel的标题名称@TableField("name")  //mybatis-plus 对应的数据库字段名称private String name;@ExcelProperty("年龄")@TableField("age")private Integer age;@ExcelProperty("地址")@TableField("address")private String address;}

第四步:启动项目

1.访问:http://localhost:8080/tempalte 下载文档模板并打开

2.在Excel中填写数据

3、访问 http://localhost:8080/upload 将填好的Excel上传,可以看到后台日志,并且数据库中也写入了表中数据。



4、访问 http://localhost/download 下载Excel数据库中的数据。

示例代码地址:
码云:https://gitee.com/yangluyao97/easyexcel-demo
github:https://github.com/815090488/-easyexcel-demo

Java使用easyExcel操作Excel就是这么简单!相关推荐

  1. java利用EasyExcel操作Excel

    EasyExcel EasyExcel读写Excel的基本使用 Excel导入导出的应用场景 数据导入:减轻录入工作量 数据导出:统计信息归档 数据传输:异构系统之间数据传输 EasyExcel简介 ...

  2. Java使用EasyExcel操作Excel表格

    1 EasyExcel简介 EasyExcel是阿里巴巴开源的一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https ...

  3. Java 使用 POI 操作 Excel

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

  4. POI和EasyExcel操作Excel

    POI和EasyExcel操作Excel 常用场景 1.将用户信息导出为excel表格(导出数据- ) 2.将Excel表中的信息录入到网站数据库(文件数据上传- ) 开发中经常会设计到excel的处 ...

  5. Java 使用 POI 操作 Excel(反射,大数据量)

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

  6. Java使用poi操作excel注意事项

    Java使用poi操作excel注意事项 1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少 2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬 ...

  7. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

  8. java使用poi操作excel删除一整行

    java使用poi操作excel删除一整行 需求1:删除excel表格第4行 代码示例: sheet.shiftRows(4, sheet.getLastRowNum(),-1); 第一个参数为行数( ...

  9. Java 使用EasyExcel导出excel文件

    Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...

最新文章

  1. HDU-1025 Constructing Roads In JGShining's Kingdom
  2. python手机版安卓-当python遇到Android手机 那么,万物皆可盘
  3. 5G与数据中心是新基建“耗电双雄”?事情不能这么看……
  4. 为什么在使用get时,Properties对象总是忽略默认值?
  5. C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理
  6. 如何手动连上mysql_如何手动安装MySql
  7. 客户旅程_我如何充分利用freeCodeCamp的旅程
  8. Http 理论基础-请求与响应、响应状态码汇总
  9. 可编译运行的安卓USB/OTG摄像头程序
  10. python办公自动化——提取pdf中的文字和表格
  11. 接口测试, 功能测试(黑盒测试)
  12. 中国撸串指北:13万家烧烤店的吃货最爱
  13. C++矩阵之岛屿的最大面积
  14. HTTP与HTTPS及计算机热门快捷键
  15. filebeat重复采集数据问题排查
  16. 浅谈provide与inject
  17. HDFS——JN扩容的正确姿势
  18. mongodb 百万_MongoDB查询性能超过500万条记录
  19. 迅雷工作原理的推测及慎用它的理由
  20. 计算机网络的应用特点是什么,现代计算机通信技术特点及通信网络的应用

热门文章

  1. 支付系统中的设计模式01:初始需求
  2. 计算机网络按覆盖范围分类可分为哪三类,单选(10分) 计算机网络按覆盖范围一般可分为三类,它们是( )...
  3. 在制定调薪计划和沟通调薪结果时,我们到底该做什么
  4. chatGPT的体验,是不是真智能?
  5. 介绍内存一致性(Memory Consistency)和缓存一致性(Cache Coherence)
  6. OWASP top 10漏洞详解
  7. linux结束进程和端口占用
  8. scratch小课堂——接球
  9. python应用程序无法正常启动0xc0000142_Win7系统应用程序无法启动提示0xc0000142的解决方法...
  10. 使用 .NET 标记游戏地图关键坐标点