在springboot中,使用easyexcel读取excel文件内容并写入数据库

1 篇文章 0 订阅
1 篇文章 0 订阅

在springboot中,使用easyexcel读取excel文件内容并写入数据库

传入一个规范的excel文件,读取其中内容并将数据存储到mysql数据库中。

本系统为一个简单的学生管理系统,excel文件与数据库的学生表中相同,第一列为学生id,第二列为学生姓名。

1. 引入依赖

在pom.xml中引入阿里巴巴的easyexcel依赖。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.1</version>
</dependency>

2. 创建用户信息类

@Data
public class ExcelStudent {
    @ExcelProperty(index = 0)  //excel中第0列为学生id
    private String id;

    @ExcelProperty(index = 1) //excel中第1列为学生姓名
    private String name;
}

3. 创建监听

因为这个监听对象需要我们自己new,因此不能交给spring容器进行管理。想要在该监听类中调用service的方法,需要手动传入service对象。

public class StudentExcelListener extends AnalysisEventListener<ExcelStudent> {
    
    private StudentService studentService;
    //手动传入service对象
    public StudentExcelListener(StudentService studentService) {
        this.studentService = studentService;
    }

    //一行一行读取excel中内容
    @Override
    public void invoke(ExcelStudent excelStudent, AnalysisContext analysisContext) {
        if (excelStudent != null) {  //如果excel不为空
            //将excelStudenteghieghieghieghieghieghieghieghieg中的数据存入实体类student的对象中
            Student student = new Student();
            student.setStudentId(excelStudent.getId());
            student.setStudentName(excelStudent.getName());
            //调用service方法,将数据存入数据库中
            studentService.save(student);
        }
    }

    //读取完毕之后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

4. 写service

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
    @Override
    public void saveByExcel(MultipartFile file, StudentService studentService) {
        try {
            InputStream inputStream = file.getInputStream();
            EasyExcel.read(inputStream, ExcelStudent.class, new StudentExcelListener(studentService)).sheet().doRead();
        }catch (Exception e){
            System.out.println(e);
        }
    }
}

在写service实现类的时候,有两个地方要注意。一个是MultipartFile类型的文件直接转成java类型的文件会报错,所以使用流来读取excel(在选easyexcel的read函数的时候被选错了)。第二个要注意的地方就是该操作要捕获异常,不然也会报错。还有就是上面的代码为service实现类的,service接口中也要对应地加上。

5. 写controller

  直接调用service中的方法。

    //根据excel添加学生
    @ApiOperation(value = "根据excel添加学生")
    @PostMapping("addStudentByExcel")
    public void addStudentByExcel(MultipartFile file){
        studentService.saveByExcel(file, studentService);
    }

6. 在swagger中测试

选择准备好的excel文件,测试。然后刷新数据库,可以发现数据已经成功地加到数据库中了。大功告成!

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用EasyExcel导入Excel文件非常简单,只需要遵循以下步骤: 1. 在pom.xml文件添加easyexcel依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.2</version> </dependency> ``` 2. 创建一个实体类来存储Excel表格的数据。 ```java @Data public class ExcelData { private String name; private Integer age; private String email; } ``` 3. 创建一个Excel读取器类。 ```java public class ExcelReader { public static List<ExcelData> readExcel(String fileName) throws Exception { InputStream inputStream = new FileInputStream(fileName); ExcelReader excelReader = new ExcelReader(inputStream, null, new ExcelListener()); excelReader.read(); List<ExcelData> dataList = ((ExcelListener)excelReader.getEventListener()).getDataList(); inputStream.close(); return dataList; } } ``` 4. 创建一个Excel监听器类,用于处理Excel表格的数据。 ```java public class ExcelListener extends AnalysisEventListener<ExcelData> { private List<ExcelData> dataList = new ArrayList<>(); @Override public void invoke(ExcelData excelData, AnalysisContext analysisContext) { dataList.add(excelData); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<ExcelData> getDataList() { return dataList; } public void setDataList(List<ExcelData> dataList) { this.dataList = dataList; } } ``` 5. 在Controller调用ExcelReader类的readExcel方法来读取Excel文件的数据。 ```java @RestController public class ExcelController { @RequestMapping("/importExcel") public String importExcel(@RequestParam("file") MultipartFile file) { try { String fileName = file.getOriginalFilename(); List<ExcelData> dataList = ExcelReader.readExcel(fileName); // 处理数据 return "导入成功"; } catch (Exception e) { e.printStackTrace(); return "导入失败"; } } } ``` 这样就可以使用EasyExcel导入Excel文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值