Spring Boot中使用EasyExcel实现Excel导入导出功能

幽灵船长 2024-05-27 ⋅ 35 阅读

简介

在实际的业务开发中,Excel是一种非常常见的数据交换格式。Spring Boot是一个快速开发框架,而EasyExcel是一个基于Java实现的Excel读写工具。结合Spring Boot和EasyExcel,我们可以非常方便地实现Excel的导入和导出功能。

在本文中,我将介绍如何在Spring Boot项目中使用EasyExcel实现Excel的导入和导出功能,并且给出一些实际应用场景的示例。

环境准备

在开始之前,我们需要准备好以下环境:

  • Java开发环境(JDK 1.8及以上版本)
  • Maven构建工具
  • Spring Boot项目

导入Excel数据

使用EasyExcel导入Excel数据非常简单。首先,我们需要在Spring Boot项目中引入EasyExcel的依赖:

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

接下来,我们需要创建一个用于接收Excel数据的实体类。假设我们要导入一个包含学生信息的Excel文件,那么实体类可以如下定义:

@Data
public class Student {
    private String name;
    private Integer age;
    private String gender;
}

然后,我们可以编写一个用于导入Excel数据的方法:

public List<Student> importExcel(MultipartFile file) {
    List<Student> students = new ArrayList<>();
    
    try {
        InputStream inputStream = file.getInputStream();
        ExcelReader excelReader = EasyExcelFactory.read(inputStream).build();
        ReadSheet readSheet = EasyExcelFactory.readSheet(0).build();
        excelReader.read(readSheet);
    
        students = readSheet.getHead().get(0);
        
        excelReader.finish();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    return students;
}

在上述方法中,我们首先通过MultipartFile获取上传的Excel文件的输入流。然后,使用EasyExcel提供的ExcelReader读取Excel文件,并通过ReadSheet指定要读取的Sheet页。最后,我们可以通过getHead().get(0)方法获取到首行的数据。

导出Excel数据

使用EasyExcel导出Excel数据同样非常简单。我们可以定义一个实体类,表示要导出的数据:

@Data
public class Student {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("性别")
    private String gender;
}

然后,我们可以编写一个用于导出Excel数据的方法:

public void exportExcel(HttpServletResponse response, List<Student> students) {
    try {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=student.xlsx");
        
        OutputStream outputStream = response.getOutputStream();
        ExcelWriter excelWriter = EasyExcelFactory.write(outputStream, Student.class).build();
        WriteSheet writeSheet = EasyExcelFactory.writerSheet(0, "学生信息").build();
        excelWriter.write(students, writeSheet);
        
        excelWriter.finish();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上述方法中,我们首先设置响应的Content-Type、字符编码和Content-Disposition。然后,通过ExcelWriter创建一个Excel文件,并通过WriteSheet指定要写入的Sheet页。最后,我们通过write()方法将数据写入Excel文件。

实际应用示例

为了更好地理解如何在实际应用中使用EasyExcel实现Excel导入导出功能,我们以一个学生成绩管理系统为例。

假设我们现在需要上传一个包含学生成绩的Excel文件,并将成绩大于80分的学生信息导出为一个新的Excel文件。在学生信息中,包含学生的姓名、年龄和成绩。

首先,我们需要创建一个用于接收学生成绩的实体类:

@Data
public class Student {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("成绩")
    private Integer score;
}

然后,我们可以编写一个用于导入学生成绩的方法:

public List<Student> importExcel(MultipartFile file) {
    List<Student> students = new ArrayList<>();
    
    try {
        InputStream inputStream = file.getInputStream();
        ExcelReader excelReader = EasyExcelFactory.read(inputStream).build();
        ReadSheet readSheet = EasyExcelFactory.readSheet(0).build();
        excelReader.read(readSheet);
        
        students = readSheet.getHead().get(0);
        
        excelReader.finish();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    return students;
}

接下来,我们可以编写一个用于导出成绩大于80分的学生信息的方法:

public void exportExcel(HttpServletResponse response, List<Student> students) {
    try {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=high_scores.xlsx");
        
        List<Student> highScores = students.stream()
                                          .filter(student -> student.getScore() > 80)
                                          .collect(Collectors.toList());
        
        OutputStream outputStream = response.getOutputStream();
        ExcelWriter excelWriter = EasyExcelFactory.write(outputStream, Student.class).build();
        WriteSheet writeSheet = EasyExcelFactory.writerSheet(0, "高分学生信息").build();
        excelWriter.write(highScores, writeSheet);
        
        excelWriter.finish();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上述方法中,我们通过Java 8的Stream API对数据进行过滤,只保留成绩大于80分的学生信息。然后,通过EasyExcel将过滤后的学生信息写入Excel文件。

总结

本文中,我们介绍了如何在Spring Boot项目中使用EasyExcel实现Excel的导入和导出功能。通过使用EasyExcel,我们可以非常方便地读写Excel文件,并且可以应对各种复杂的Excel操作需求。

希望本文对你有所帮助,如果有任何问题或建议,请留言让我知道。谢谢!


全部评论: 0

    我有话说: