Spring Boot 导出EXCEL模板以及导入EXCEL数据(阿里Easy Excel实战)

  1. 导入pom依赖

  2. 编写导出模板

    @ApiOperation("导出xxx模板")
    @GetMapping("/downTemplates")
    public void download(HttpServletResponse response) throws FileNotFoundException, IOException {
    response.reset();
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    File temFile=new File("src/main/resources/templates/xxx导入模版.xlsx");
    String fileName = URLEncoder.encode("xxx导入模版", "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-disposition", "attachment;filename*=utf-8' '" + fileName +".xlsx");
    FileCopyUtils.copy(new FileInputStream(temFile), response.getOutputStream());
    response.getOutputStream().close(); }
  3. 导入数据处理

    1. 编写监听器

      @Component
      public class xxxListener extends AnalysisEventListener<Entity> { private static final Logger LOGGER = LoggerFactory.getLogger(xxxListener.class);
      //读取数据初始化值
      private static final int BATCH_COUNT = 50;
      List<Entity> list = new ArrayList<Entity>();
      @Resource
      private xxxxService xxxxService; public xxxxListener() {
      xxxxService=new xxxxServiceImpl();
      } public xxxxListener(xxxxService xxxxService) {
      this.xxxxService=xxxxService;
      } @Override
      public void invoke(xxxx data, AnalysisContext analysisContext) {
      list.add(data);
      // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
      if (list.size() >= BATCH_COUNT) {
      saveData();
      // 存储完成清理 list
      list.clear();
      }
      } /**
      * 所有excel表中数据解析完成了 都会来调用这个
      * 解释为什么要保存数据?
      *初始化读取数量为50,表中信息已经加载完毕,,假设excel表中最后只剩下30行遗留数据,所以为了防止存在遗留数据 尽量判断下集合是否为空,不为空在进行存储(这是我的逻辑需要判断,如果不需要也可进行不判断)
      * @param analysisContext
      */
      @Override
      public void doAfterAllAnalysed(AnalysisContext analysisContext) {
      if(list.size()==0){
      return;
      }
      saveData();
      LOGGER.info("所有数据解析完成!");
      } private void saveData() {
      //代码实现类层保存数据
      xxxxService.saveBatch(list);
      LOGGER.info("存储数据库成功!");
      }
    2. 编写数据转换器

      public class XXXConverter implements Converter<Integer> {
      //在java中保护单位是用数字来标识的所以是int
      @Override
      public Class supportJavaTypeKey() {
      return Integer.class;
      } // 在excel中是string
      @Override
      public CellDataTypeEnum supportExcelTypeKey() {
      return CellDataTypeEnum.STRING;
      } //将excel的数据类型转为java数据类型 @Override
      public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
      String stringValue = cellData.getStringValue();
      if (stringValue == null) {
      throw new RuntimeException("数据为空");
      } if ("(自己的数据)".equals(stringValue)) {
      return 1;
      } return 0;
      } //将java的数据类型转为excel数据类型
      @Override
      public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
      return new WriteCellData<>();
      }
      }

Spring Boot 导出EXCEL模板以及导入EXCEL数据(阿里Easy Excel实战)的更多相关文章

  1. Spring Boot 导出Excel表格

    Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...

  2. Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用

    Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用 原创 2017-04-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章介绍了一些基础,但都是静 ...

  3. 【spring boot】9.spring boot+spring-data-jpa的入门使用,实现数据持久化

    spring-data-jpa官方使用说明文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ spring-d ...

  4. Spring Boot、微服务架构和大数据

    一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...

  5. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

  6. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...

  7. 下载excel模板,导入数据时需要用到

    页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...

  8. Spring Boot中使用模板引擎Thymeleaf

    一.Thymeleaf简介 Thymeleaf[taɪm lif],百里香叶,是一个流行的模板引擎,该模板引擎采用Java语言开发.Java中常见的模板引擎有Velocity.Freemaker.Th ...

  9. Spring Boot导出jar包发布

    一:事由 现在的项目组开发项目使用的是Spring Boot的技术,开发的时候是直接通过一个入口主函数来启动项目的.如果将项目交给客户,怎样才能正确的发布运行呢?百度了一下有关的知识,大概了解到是通过 ...

  10. Spring Boot整合 Thymeleaf 模板引擎

    什么是Thymeleaf Thymeleaf是一款用于渲染XML.XHTML.HTML5内容的模板引擎.类似Velocity,FreeMaker模板引擎,它也可以轻易的与Spring MVC等Web框 ...

随机推荐

  1. 实战0-1,Java开发者也能看懂的大模型应用开发实践!!!

    前言 在前几天的文章<续写AI技术新篇,融汇工程化实践>中,我分享说在RAG领域,很多都是工程上的实践,做AI大模型应用的开发其实Java也能写,那么本文就一个Java开发者的立场,构建实 ...

  2. Nginx惊群现象的两种解决办法

    惊群现象: 惊群现象是指由多个worker进程监听同一个Socket事件时,当事件发生时,相关的所有进程被惊醒,但最终只能有一个进程对该事件进行处理,其他进程会重新休眠,从而导致系统资源的浪费和系统性 ...

  3. windows开发环境备份,再也不怕重装系统了

    每次重装系统后,都要重新安装软件,配置环境变量,极为繁琐.故作环境环境变量备份,常用软件恢复记录,前提是你的软件要安装在非系统盘,D/E盘等 软件安装在非系统盘 开发软件安装在非系统盘,建好目录.重装 ...

  4. Java进程(基础)

    基本概念 1.进程:程序的执行过程 2.线程:一个进程可以有单个线程也就是我们说的单线程,还可以有多个线程也就是我们说的多线程, 线程 1.当一个类继承了Thread类就可以当成一个线程用 2.我们会 ...

  5. DS18B20初始化-读-写-温度转换

    DS18B20 (一)初始化 (二)读字节 (三)写字节 (四)温度转换 1获得数据 2转换数据 (一)初始化 初始化时序: 数据线先拉到高电平,稍作延时即可(刚开始是高电平还是低电平芯片手册上其实不 ...

  6. 用ps命令查看进程的内存

    http://blog.csdn.net/tigerscorpio/article/details/5960705 http://blog.csdn.net/licanhua/article/deta ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题

    四.用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典.开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大.请给出在大数组上实现 ...

  8. Linux中修改文件权限方法

    在此记录一下,看到的一篇写的比较好的帮我解决问题的文章 这里也补充一下,如果要修改当前目录下的所有文件时,文件名用 * 代替,如:chmod 755 *(即可修改当前文件下所有文件的权限为:-rwxr ...

  9. .NET 8 IEndpointRouteBuilder详解

    Map ​ 经过对 WebApplication 的初步剖析,我们已经大致对Web应用的骨架有了一定了解,现在我们来看一下Hello World案例中仅剩的一条代码: app.MapGet(" ...

  10. mysql常用函数详解

    1. Mysql内置函数分类及使用范围 数学函数: 这类函数只要用于处理数字.这类函数包括绝对值函数.正弦函数.余弦函数.获取随机数函数等. 字符串函数:这类函数主要用于处理字符串.其中包括字符串连接 ...