谷粒 | 12 |easyExcel使用
一、引入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使用的更多相关文章
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- 大数据技术之_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 ...
- 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- 【EasyExcel】使用easyExcel过程中,项目报错的解决集合
报错:Can not close IO [ERROR] 2019-11-02 13:51:21.210 [ProExportSkuDataJob-1455-TaskThread-1] [com.dma ...
- 【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
解决方法: 使用easyexcel解决超大数据量的导入导出xlsx文件 easyexcel最大支持行数 1048576. 官网地址: https://alibaba-easyexcel.github. ...
- springboot easyexcel
pom..xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
- EasyExcel 自定义单元格式的问题。
最近在做一个关于性能测试管理系统,一个新的需求,需要导出测试报告,直接使用了ali的封装的EasyExcel,但是在复杂头与一些样式,就缺少了自定义的灵活性,在官方demo中没有找到很好的解决方法. ...
随机推荐
- 分析 ajax 请求并抓取 “今日头条的街拍图”
今日头条抓取页面: 分析街拍页面的 ajax 请求: 通过在 XHR 中查看内容,获取 url 链接,params 参数信息,将两者进行拼接后取得完整 url 地址.data 中的 article_u ...
- Hive On Spark保姆级攻略
声明: 此博客参考了官网的配置方式,并结合笔者在实践网上部分帖子时的踩坑经历整理而成 这里贴上官方配置说明: [官方]: https://cwiki.apache.org//confluence/di ...
- P3175-[HAOI2015]按位或【min-max容斥,FWT】
正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个\(n\)位二进制数\(s=0\),每次有\(p_i\)概率选取数字\(i\)让\(s ...
- PyTorch模型读写、参数初始化、Finetune
使用了一段时间PyTorch,感觉爱不释手(0-0),听说现在已经有C++接口.在应用过程中不可避免需要使用Finetune/参数初始化/模型加载等. 模型保存/加载 1.所有模型参数 训练过程中,有 ...
- 41 位 Contributor 参与,1574 个 PR,不容错过的版本更新!
6 月 25 日,在商业公司 SphereEx 正式成立一月之余的今天,我们很高兴的宣布 Apache ShardingSphere 迎来了 5.0.0-beta 版本的正式发布.经过半年多的优化和打 ...
- Java基础之(十二):数组
数组 数组概述 定义 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组 ...
- Java初步学习——2021.10.11每日总结,第六周周一
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天继续学习菜鸟教程Java实例 字符串 9.字符串小写转大写--toUpperCase方法 public class Ma ...
- 1002 写出这个数 (20 分) java解题
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10^100. 输出格式: 在一行内输 ...
- 返回值优化 RVO
<深度探索C++对象模型>-- 2.3 返回值的初始化 & 在编译器层面做优化
- Scrum Meeting 16
第16次例会报告 日期:2021年06月11日 会议主要内容概述: 最后一次例会 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公开性: 组员 负责 ...