SpringBoot 整合easyexcel导出Excel

官方文档#

点我直达

添加依赖#

  这里SpringBoot项目就不带领大家创建了,直接在pom.xml中添加esayexcel依赖即可

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

创建导出实体类#

Student.java

复制代码
package net.ybclass.online_ybclass.exceldemo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;

/**
 * @ClassName:Student
 * @Description:Excel导出实体类
 * @Author:chenyb
 * @Date:2020/11/11 10:30 上午
 * @Versiion:1.0
 */
@ExcelIgnoreUnannotated()
public class Student {

    private Integer myId;

    @ExcelProperty(value = "学号",index = 0) //0 对应导出Excel表格的第一列
    private Integer id;

    @ExcelProperty(value = "姓名",index = 1)
    private String name;

    @ExcelProperty(value = "性别",index = 2)
    private String sex;

    @ExcelProperty(value = "班级",index = 3)
    private String grade;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }
}
复制代码

控制层#

复制代码
package net.ybclass.online_ybclass.exceldemo;

import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @ClassName:ExcelController
 * @Description:excel导出控制层
 * @Author:chenyb
 * @Date:2020/11/11 10:31 上午
 * @Versiion:1.0
 */
@RestController
public class ExcelController {
    /**
     * 导出
     */
    @RequestMapping("/export")
    public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {


        //模拟需要导出的数据
        List<Student> list = new ArrayList();
        Student student = new Student();
        student.setId(1);
        student.setName("1321");
        student.setSex("男");
        student.setGrade("一年级");
        for (int i = 0; i < 5; i++) {
            list.add(student);
        }

        //设置并导出
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");

        //设置文件名
        SimpleDateFormat fDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
        String fileName = "导出测试表" + fDate.format(new Date()) + ".xlsx";
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        EasyExcel.write(response.getOutputStream(), Student.class).sheet("sheet1").doWrite(list);
    }
}
复制代码

导出Excel的数据#

导入Excel数据#

创建Student读取类

StudentListener.java

复制代码
package net.ybclass.online_ybclass.exceldemo;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName:StudentListener
 * @Description:学生读取类
 * @Author:chenyb
 * @Date:2020/11/20 1:49 下午
 * @Versiion:1.0
 */
public class StudentListener extends AnalysisEventListener<Student> {
    private List<Student> studentList = new ArrayList<Student>();
    public StudentListener() {
        super();
        studentList.clear();
    }
    /**
     * 每一条数据解析都会调用
     */
    @Override
    public void invoke(Student student, AnalysisContext analysisContext) {
        //此处,可以做数据的校验
        studentList.add(student);
    }
    /**
     * 所有数据解析完成都会调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        studentList.forEach(System.out::println);
    }

    public List<Student> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }
}
复制代码

Student.java

复制代码
package net.ybclass.online_ybclass.exceldemo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;

/**
 * @ClassName:Student
 * @Description:Excel导出实体类
 * @Author:chenyb
 * @Date:2020/11/11 10:30 上午
 * @Versiion:1.0
 */
@ExcelIgnoreUnannotated()
public class Student {

    private Integer myId;

    @ExcelProperty(value = "学号",index = 0) //0 对应导出Excel表格的第一列
    private Integer id;

    @ExcelProperty(value = "姓名",index = 1)
    private String name;

    @ExcelProperty(value = "性别",index = 2)
    private String sex;

    @ExcelProperty(value = "班级",index = 3)
    private String grade;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }


}
复制代码

控制层#

复制代码
    /**
     * 导入学生信息
     *
     * @param file
     * @throws IOException
     */
    @RequestMapping(value = "import")
    public List<Student> importStudentInfos(MultipartFile file) throws IOException {
        StudentListener studentListener = new StudentListener();
        EasyExcel.read(file.getInputStream(), Student.class, studentListener).sheet().doRead();
        return studentListener.getStudentList();
    }
复制代码

 

posted @   陈彦斌  阅读(739)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-11-11 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2019-11-11 The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
2019-11-11 SVN 回滚提交的代码
2019-11-11 MySql Navicat可视化工具
点击右上角即可分享
微信分享提示
主题色彩