excel 读写
导包
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version> </dependency>
实体
@Data public class DemoData { //设置表头名称 index第0列 @ExcelProperty(value = "学生编号",index = 0) private int sno; //设置表头名称 @ExcelProperty(value = "学生姓名",index = 1) private String sname; }
监听
public class ExcelListener extends AnalysisEventListener<DemoData> { //读取每一行数据 @Override public void invoke(DemoData demoData, AnalysisContext analysisContext) { System.out.println(demoData); } //数据读取完做的事 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
测试
public class ExcelTest { @Test public void writeTest(){ // 写法1 String fileName = "E:\\test\\write.xlsx"; // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 // 如果这里想使用03 则 传入excelType参数即可 EasyExcel.write(fileName, DemoData.class).sheet("学生列表").doWrite(data()); } @Test public void readTest(){ String fileName = "E:\\test\\write.xlsx"; EasyExcel.read(fileName, DemoData.class,new ExcelListener()).sheet().doRead(); } //循环设置要添加的数据,最终封装到list集合中 private static List<DemoData> data() { List<DemoData> list = new ArrayList<DemoData>(); for (int i = 0; i < 10; i++) { DemoData data = new DemoData(); data.setSno(i); data.setSname("张三"+i); list.add(data); } return list; } }
数据库读写

package com.atguigu.eduservice.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.atguigu.baseservice.handler.GuliException; import com.atguigu.eduservice.entity.EduSubject; import com.atguigu.eduservice.entity.vo.ExcelSubjectData; import com.atguigu.eduservice.service.EduSubjectService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; public class SubjectExcelListener extends AnalysisEventListener<ExcelSubjectData> { public EduSubjectService subjectService; public SubjectExcelListener() {} //创建有参数构造,传递subjectService用于操作数据库 public SubjectExcelListener(EduSubjectService subjectService) { this.subjectService = subjectService; } //读取一行 判断后符合条件就数据库操作一行 @Override public void invoke(ExcelSubjectData excelSubjectData, AnalysisContext analysisContext) { //1读取数据验空 if(excelSubjectData==null){ throw new GuliException(20001,"导入课程分类失败"); } //2判断一级分类名称是否重复 每行数据获取一级分类的名称 第一列的数据名称 EduSubject existOneSubject = this.existOneSubject(subjectService, excelSubjectData.getOneSubjectName()); //3一级不重复插入数据库 if(existOneSubject==null){ existOneSubject = new EduSubject(); existOneSubject.setTitle(excelSubjectData.getOneSubjectName()); existOneSubject.setParentId("0"); subjectService.save(existOneSubject); } String pid = existOneSubject.getId(); //4判断二级名称是否重复 EduSubject existTwoSubject = this.existTwoSubject(subjectService, excelSubjectData.getTwoSubjectName(), pid); //5二级不重复插入数据库 if(existTwoSubject==null){ existTwoSubject = new EduSubject(); existTwoSubject.setTitle(excelSubjectData.getTwoSubjectName()); existTwoSubject.setParentId(pid); subjectService.save(existTwoSubject); } } //判断一级分类是否重复 private EduSubject existOneSubject(EduSubjectService subjectService, String name) { QueryWrapper<EduSubject> wrapper = new QueryWrapper<>(); wrapper.eq("parent_id","0"); wrapper.eq("title",name); EduSubject eduSubject = subjectService.getOne(wrapper); return eduSubject; } //判断二级分类是否重复 private EduSubject existTwoSubject(EduSubjectService subjectService, String name,String pid) { QueryWrapper<EduSubject> wrapper = new QueryWrapper<>(); wrapper.eq("parent_id",pid); wrapper.eq("title",name); EduSubject eduSubject = subjectService.getOne(wrapper); return eduSubject; } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律