一、引入easyexcel依赖

 <!--easyExcel依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>

二、根据excel数据格式创建实体类

@Data
public class SubjectData { @ExcelProperty(value = "一级标题",index = 0) //easyexcel注释,列名和列索引值
private String firstLevelSubject; @ExcelProperty(value = "二级标题",index = 1)
private String secondLevelSubject;
}

三、控制层和业务层接口

//添加课程分类
//获取上传过来的文件,把文件内容读取出来
@PostMapping("addSubject")
@ApiOperation(value = "上传并读取excel表")
public Result addSubject(MultipartFile file) {
//上传过来excel文件
subjectService.saveSubject(file,subjectService);
return Result.ok();
}
public interface EduSubjectService extends IService<EduSubject> {

     //添加课程分类
void saveSubject(MultipartFile file,EduSubjectService subjectService); List<FirstLevelSubject> getFirstAndSecondSubjects();
}`
@Override
public void saveSubject(MultipartFile file, EduSubjectService subjectService) {
try {
//获取文件输入流
InputStream inputStream = file.getInputStream();
EasyExcel.read(inputStream, SubjectData.class,new SubjectExcelListener(subjectService)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
} }

四、监听器

public class SubjectExcelListener extends AnalysisEventListener {

    //因为SubjectExcelListener不交给spring进行管理,不能注入其他对象,无法操作数据库
public EduSubjectService subjectService; public SubjectExcelListener() {
} public SubjectExcelListener(EduSubjectService subjectService) {
this.subjectService = subjectService;
} @Override
public void invoke(Object data, AnalysisContext context) {
SubjectData subjectData = (SubjectData) data;
if (data == null) {
throw new MyException(20001, "文件数据为空");
} //一行一行读取,每次读取两个值,第一个值一级分类,第二个值二级分类
//判断一级分类是否重复,一级分类不能重复添加
EduSubject existOneSubject = existFirstLevelSubject(subjectService, subjectData.getFirstLevelSubject());
if (existOneSubject == null) {
existOneSubject = new EduSubject();
existOneSubject.setParentId("0");
existOneSubject.setTitle(subjectData.getFirstLevelSubject());
subjectService.save(existOneSubject);
}
String pid = existOneSubject.getId(); //判断二级分类是否重复
EduSubject existSecondSubject = existSecondLevelSubject(subjectService, subjectData.getSecondLevelSubject(), pid);
if (existSecondSubject == null) {
existSecondSubject = new EduSubject();
existSecondSubject.setParentId(pid);
existSecondSubject.setTitle(subjectData.getSecondLevelSubject());
subjectService.save(existSecondSubject);
} } @Override
public void doAfterAllAnalysed(AnalysisContext context) { } //判断一级分类不能重复添加
private EduSubject existFirstLevelSubject(EduSubjectService subjectService, String name) {
QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
wrapper.eq("title", name);
wrapper.eq("parent_id", "0");
EduSubject firstSubject = subjectService.getOne(wrapper);
return firstSubject;
} //判断二级分类是否重复
private EduSubject existSecondLevelSubject(EduSubjectService subjectService, String name, String pid) {
QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
wrapper.eq("title", name);
wrapper.eq("parent_id", pid);
EduSubject secondSubject = subjectService.getOne(wrapper);
return secondSubject;
}
}

谷粒 | 12 |easyExcel使用的更多相关文章

  1. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  2. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  3. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

  4. 大数据技术之_08_Hive学习_05_Hive实战之谷粒影音(ETL+TopN)+常见错误及解决方案

    第10章 Hive实战之谷粒影音10.1 需求描述10.2 项目10.2.1 数据结构10.2.2 ETL原始数据10.3 准备工作10.3.1 创建表10.3.2 导入ETL后的数据到原始表10.3 ...

  5. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  6. 【EasyExcel】使用easyExcel过程中,项目报错的解决集合

    报错:Can not close IO [ERROR] 2019-11-02 13:51:21.210 [ProExportSkuDataJob-1455-TaskThread-1] [com.dma ...

  7. 【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法

    解决方法: 使用easyexcel解决超大数据量的导入导出xlsx文件 easyexcel最大支持行数 1048576. 官网地址: https://alibaba-easyexcel.github. ...

  8. springboot easyexcel

    pom..xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  9. EasyExcel 自定义单元格式的问题。

    最近在做一个关于性能测试管理系统,一个新的需求,需要导出测试报告,直接使用了ali的封装的EasyExcel,但是在复杂头与一些样式,就缺少了自定义的灵活性,在官方demo中没有找到很好的解决方法. ...

随机推荐

  1. localStorage util

    // localStorage util var db ={ set : function(key, obj){ localStorage.setItem(key, JSON.stringify(ob ...

  2. web 阶段的一些简答题

    1.jsp 9个隐含对象 2. jsp 4大域对象 3.mybatis 中 #{} %{ } 的区别于联系 4. Servlet容器默认是采用单实例多线程的方式处理多个请求的: 5.Cookie 与S ...

  3. 使用form插件 和ajax 结合使用 没有调用success的原因

    当我做文件上传的时候出现不调用success方法  将datype: 'json' 注释掉后成功响应 浏览器显示200状态码,并且响应头为json格式,格式ajax不认为它是json,所以一直执行错误 ...

  4. 小白学习Python英语基础差怎么办,都帮你想好拉!看这里

    运算符与随机数 1.module:模块 2.sys(system):系统 3.path:路径 4.import:导入 5.from:从- 定义函数与设定参数 1.birthday:出生日期 2.yea ...

  5. Unittest 框架之断言,你学会了吗??

    unittest断言 Python在 unittest.TestCase 类中提供了很多断言方法.断言方法检查你认为应该满足的条件是否确实满足.如果该条件确实满足,你对程序行为的假设就得到了确认,你就 ...

  6. IDEA Web渲染插件开发(一)— 使用JCEF

    目前网上已经有了很多关于IDEA(IntelliJ平台)的插件开发教程了,本人觉得简书上这位作者秋水畏寒的关于插件开发的文章很不错,在我进行插件开发的过程中指导了我很多.但是综合下来看,在IDEA上加 ...

  7. 基于nginx实现私有yum仓库

    基于本地光盘的源 server端IP:10.0.0.79 nginx使用默认路径.端口 yum install nginx -y #更改以root运行 sed -i '/^user/s/nginx/r ...

  8. allure报告中allure.title 如何去掉后方的参数化显示

    1.解决方法如下 listener.py 文件位置:Lib\site-packages\allure_pytest\listener.py (第三方包所在的LIb目录) 将下图中红色部分test_re ...

  9. 2020.11.1--pta阶梯练习赛补题

    7-5 古风排版 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<),是每一列的字符数.第二行给出一个长度不超过1 ...

  10. docsify + Gitee Pages服务搭建开源项目网站

    前言 base-admin从开源至今,已经收获了2k Stat,而我们一直都没有一份像样的在线文档,最近写了一个博客园随笔备份Java脚本,将博客随笔备份到本地,格式是md文档格式,就有意去找将md文 ...