龙空技术网

【干货】EasyExcel确实好用,Springboot+EasyExcel实操

Java编程世界 4797

前言:

而今你们对“springmvc读取excel”大概比较珍视,同学们都需要学习一些“springmvc读取excel”的相关文章。那么小编同时在网摘上汇集了一些对于“springmvc读取excel””的相关文章,希望咱们能喜欢,咱们快快来学习一下吧!

一、EasyExcel简介

EasyExcel是阿里巴巴的一个开源项目,它是基于Apache POI封装的一款Java处理Excel的工具。EasyExcel可以将Excel文件转换成Java对象或将Java对象转换成Excel文件,而且操作简单,性能优越,具有很高的稳定性和可扩展性。EasyExcel不需要依赖任何第三方库,可以直接使用,因此在项目开发中非常方便。

二、SpringBoot集成EasyExcel

添加依赖

在pom.xml中添加以下依赖:

<!-- EasyExcel --><dependency>    <groupId>com.alibaba</groupId>    <artifactId>easyexcel</artifactId>    <version>2.3.0</version></dependency>

编写实体类

首先,需要定义一个实体类来映射Excel中的数据。这个实体类需要使用EasyExcel提供的注解来指定Excel中每个列的名称、顺序、类型等信息。例如:

@Datapublic class Student {    @ExcelProperty("学号")    private Integer id;    @ExcelProperty("姓名")    private String name;    @ExcelProperty("年龄")    private Integer age;    @ExcelProperty("班级")    private String className;}

其中,@Data注解是Lombok提供的,可以自动生成getter、setter、toString等方法。

编写读取Excel的代码

接下来,需要编写读取Excel的代码。通过EasyExcel提供的工具类ExcelReaderFactory,可以创建一个ExcelReader对象,然后通过ExcelReader对象来读取Excel文件中的数据。例如:

@Componentpublic class ExcelReaderUtil {    public static List<Student> readExcel(MultipartFile file) throws IOException {        InputStream inputStream = file.getInputStream();        ExcelReader reader = EasyExcel.read(inputStream, Student.class, new StudentExcelListener()).build();        ReadSheet readSheet = EasyExcel.readSheet(0).build();        reader.read(readSheet);        reader.finish();        return StudentExcelListener.getData();    }}

其中,MultipartFile是SpringMVC提供的上传文件类,用于接收前端上传的Excel文件。

这里还需要使用一个StudentExcelListener类,用于在读取Excel文件时回调。在这个类中,可以通过@ExcelPropertyRowNumber注解获取到当前行的行号,然后根据行号来判断当前读取到的是哪个字段。例如:

public class StudentExcelListener

实现了AnalysisEventListener接口,重写了invoke()和doAfterAllAnalysed()方法,代码如下:

public class StudentExcelListener extends AnalysisEventListener<Student> {    private static final List<Student> DATA = new ArrayList<>();    @Override    public void invoke(Student data, AnalysisContext context) {        data.setId(context.readRowHolder().getRowIndex());        DATA.add(data);    }    @Override    public void doAfterAllAnalysed(AnalysisContext context) {    }    public static List<Student> getData() {        return DATA;    }}

其中,invoke()方法在读取Excel文件时回调,每读取一行数据就会调用一次。在这个方法中,可以获取到当前行的数据和上下文信息,然后将数据添加到List中。这里使用了一个静态的List来保存读取到的数据,这样就可以在doAfterAllAnalysed()方法中将数据返回给调用者。

编写写入Excel的代码

除了读取Excel文件,EasyExcel还提供了写入Excel文件的功能。与读取Excel文件类似,需要先创建一个ExcelWriter对象,然后通过ExcelWriter对象来写入数据。例如:

@Componentpublic class ExcelWriterUtil {    public static void writeExcel(HttpServletResponse response, List<Student> list) throws IOException {        String fileName = URLEncoder.encode("学生信息表", "UTF-8");        response.setContentType("application/vnd.ms-excel");        response.setCharacterEncoding("utf-8");        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");        ServletOutputStream outputStream = response.getOutputStream();        ExcelWriter writer = EasyExcel.write(outputStream, Student.class).build();        WriteSheet writeSheet = EasyExcel.writerSheet("学生信息").build();        writer.write(list, writeSheet);        writer.finish();        outputStream.flush();        outputStream.close();    }}

其中,HttpServletResponse是SpringMVC提供的响应类,用于向前端发送数据。这里先设置响应头信息,然后创建一个ExcelWriter对象,设置写入的类和Sheet名称,最后将数据写入Excel文件中。

三、总结

本文介绍了如何通过SpringBoot结合EasyExcel来实现对Excel文件的快速处理。首先,需要添加EasyExcel的依赖,然后定义一个实体类来映射Excel中的数据。接着,通过ExcelReaderFactory创建一个ExcelReader对象,然后通过ExcelReader对象来读取Excel文件中的数据。在读取Excel文件时,还需要使用一个StudentExcelListener类来回调。最后,通过ExcelWriter类来写入Excel文件中的数据。

EasyExcel操作Excel的方式简单、高效、稳定,因此在实际项目开发中非常适用。如果您在项目中需要处理Excel文件,不妨尝试一下EasyExcel,相信会为您带来更加便捷的开发体验。

标签: #springmvc读取excel