使用easyexcel进行读写操作
com.alibaba
easyexcel
2.1.1
package com.xxz.edu.test;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* excel data test entity
*/
@Data
public class DemoData {
// 设置excel目标文件的表头
@ExcelProperty("学生编号")
private Integer son;
@ExcelProperty("学生姓名")
private String sname;
}
package com.xxz.edu.test.excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Map;
public class ExcelReaderListener extends AnalysisEventListener {
//一行一行的读取上传的excel文件内容
@Override
public void invoke(DemoData data, AnalysisContext analysisContext) {
System.out.println("当前行数据:" + data);
}
//读取表头内容
@Override
public void invokeHeadMap(Map headMap, AnalysisContext context) {
System.out.println("表头信息:" + headMap);
// super.invokeHeadMap(headMap, context);
}
//读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
package com.xxz.edu.test.excel;
import com.alibaba.excel.EasyExcel;
import org.junit.Test;
import java.util.Arrays;
/**
* easyexcel 测试 方法 编写
*/
public class TestEasyExcel {
@Test
public void EasyExcelWriter(){
// 实现excel写的操作
// 1. 设置 写入 文件夹 地址 和 excel 文件名称
String filename = "E://write.xlsx";
// 2. 调用 easyexcel里面的方法实现写操作
// write方法两个参数 , 第一个 文件名 、 第二个 数据绑定 实体类
EasyExcel.write(filename, DemoData.class)
.sheet("学生列表") //设置sheet单元名
.doWrite(Arrays.asList(new DemoData(1, "123"), new DemoData(2, "123"),new DemoData(3, "123")));
}
@Test
public void EasyExcelReader(){
//实现 excel 读的操作
String filename = "E://write.xlsx";
EasyExcel.read(filename, DemoData.class, new ExcelReaderListener()).sheet().doRead();
}
}
项目实战案例演示
com.alibaba
easyexcel
2.1.1
package com.xxz.edu.entity.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 用于 操作 excel 的 Subject 课程分类 对象
*/
@Data
public class SubjectData {
@ExcelProperty(index = 0)
private String oneSubjectName;
@ExcelProperty(index = 1)
private String towSubjectName;
}
package com.xxz.edu.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.xxz.edu.entity.excel.SubjectData;
import com.xxz.edu.service.SubjectService;
/**
* SubjectData excel数据读取监听器对象 不能交给spring 管理 需要new 即 自己 管理
* 因此:不能通过 @Autowired 注入 service调用 新增方法, 即不能实现 数据库操作
* 解决方案:
* 1. 在 new 该对象监听器的时候 手动的将 目标service对象 注入进来 [有参构造器 属性 注入方式]
* 2.
*/
public class SubjectExcelListener extends AnalysisEventListener {
private SubjectService subjectService;
public SubjectExcelListener(){}
//[解决方式一]有参构造器
public SubjectExcelListener(SubjectService subjectService){
this.subjectService = subjectService;
}
//一行一行的读取上传的excel文件内容
@Override
public void invoke(SubjectData subjectData, AnalysisContext analysisContext) {
}
//读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
package com.xxz.edu.service.impl;
import com.alibaba.excel.EasyExcel;
import com.xxz.edu.entity.Subject;
import com.xxz.edu.entity.excel.SubjectData;
import com.xxz.edu.listener.SubjectExcelListener;
import com.xxz.edu.mapper.SubjectMapper;
import com.xxz.edu.service.SubjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
*
* 课程科目 服务实现类
*
*
* @author testjava
* @since 2022-12-22
*/
@Service
public class SubjectServiceImpl extends ServiceImpl implements SubjectService {
@Autowired
private SubjectMapper subjectMapper;
//添加 课程 分类
@Override
public void saveSubject(MultipartFile file, SubjectService subjectService) {
//
try{
// 获取文件 输入流
InputStream in = file.getInputStream();
// 调用方法进行读取
EasyExcel.read(in, SubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();
}catch (Exception e){
}
}
}
package com.xxz.edu.controller;
import com.xxz.edu.entity.Subject;
import com.xxz.edu.service.SubjectService;
import com.xxz.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
*
* 课程科目 前端控制器
*
*
* @author testjava
* @since 2022-12-22
*/
@RestController
@RequestMapping("/edu/subject")
public class SubjectController {
@Autowired
private SubjectService subjectService;
//添加课程分类
//获取上传的文件,将文件内容读取出来
@PostMapping("addSubject")
public Result addSubject(MultipartFile file){
//调用添加业务
subjectService.saveSubject(file, subjectService);
return Result.ok();
}
//
}