0
点赞
收藏
分享

微信扫一扫

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇


【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_EasyPoi

悟纤:师傅,那个讨人厌的产品又来捣乱了~ 😒

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_spring boot_02

师傅:哈哈,你又来抱怨老板设定的无休止需求了啊? 😆

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_spring boot_03

悟纤:没错,这次竟然要求导出多个Sheet,这还能不能好好地活着了? 😩

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_数据_04

师傅:放心,这个功能非常简单,像我这么菜的人都能实现呢,你肯定可以。 😎

悟纤:噢,那太好了,我就知道师傅最厉害啦! 😍

师傅:当然,聪明如我怎么会让你再加班到半夜9点呢?嘿嘿。 😏

悟纤:哈哈,师傅您真幽默,能不能再给点儿调侃? 😜

师傅:你想听笑话吗?产品经理说了句:“我不懂技术,但我知道这很困难。” 😂

悟纤:哈哈哈,笑死我了,这不是笑话,这是经典啊!🤣

师傅:还有,给你一个好消息,完成之后,今晚请你吃饭庆祝!🍣🍱

悟纤:耶!师傅最棒了!💃🏻

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_EasyPoi_05

导读

在前面的几个小节中,介绍的都是单个Sheet的导出,在实际的项目中,希望导出多个Sheet的数据,如下的效果:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_spring boot_06

用户信息的sheet如下:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_数据_07

学生课程表的数据如下:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_excel_08

这里实现的效果实际上就是将前面讲到的两个数据表,原先导出的是两个Excel,然后这里导出了一个Excel多个Sheet的方式。

目前单Sheet和单Class的方式比较多,对于多Sheet的方式还是一片空白,这里做一下说明。


一、导出多Sheet分析

在前面ExcelUtil提供的方法中,有这么一个方法:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_数据_09

在这个方法中,接收的是一个List<Map<String,Object>> 这里特别像多Sheet的导出,一个Sheet就是一个Map<String,Object>,那么在一个Map中都需要进行什么key的设置呢?

跟进这个方法看一下,可以找到ExcelExportUtil.exportExcel的方法:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_spring boot_10

在这个方法中,可以看到这里for循环遍历了list对象,然后map中的key分别是title、entity、data。仔细一看,这些信息不就是导出单个excel需要的参数么,那么到这里我们大概就清楚了,就是将导出单个excel的信息,设置到Map中,然后就可以实现多Sheet的导出了。

二、导出多Sheet实操

接下来看下具体的代码逻辑。

2.1 添加用户sheet

首先定义多sheet对list对象:

List<Map<String, Object>> exportParamList = Lists.newArrayList();

模拟用户数据:

List<UserExportVO> users = new ArrayList<>();
users.add(new UserExportVO("悟纤",1,new Date(),"18688888888","1688@qq.com",null,"公众号SpringBoot"));
users.add(new UserExportVO("师傅",1,new Date(),"18666666666","1888@qq.com",null,"公众号SpringBoot"));

配置sheet的map信息,根据上面的源码分析,主要是设置title、entity、data:

Map<String, Object> sheetMap = Maps.newHashMap();
sheetMap.put("title",new ExportParams("用户数据", "用户信息"));
sheetMap.put("entity",UserExportVO.class);
sheetMap.put("data",users);

将该sheet map信息添加到list对象中:

exportParamList.add(sheetMap);

自此已经添加了一个sheet了。

2.2 添加用户课程-学生sheet

接下来将课程-学生的数据添加进来,构造学生、老师、课程表的数据信息:

//1. 学生数据
List<StudentExportVO> students1 = new ArrayList<>();
students1.add(new StudentExportVO("001","悟纤",1,new Date()));
students1.add(new StudentExportVO("002","刘亦菲",0,new Date()));
students1.add(new StudentExportVO("003","赵丽颖",0,new Date()));

List<StudentExportVO> students2 = new ArrayList<>();
students2.add(new StudentExportVO("001","刘诗诗",1,new Date()));
students2.add(new StudentExportVO("002","迪丽热巴",0,new Date()));
students2.add(new StudentExportVO("003","杨幂",0,new Date()));

//2.老师数据.
TeacherExportVO teacher1 = new TeacherExportVO("林老师");
TeacherExportVO teacher2 = new TeacherExportVO("王老师");

//3.课程数据以及关联数据.
List<CourseExportVO> courseList = new ArrayList<>();
courseList.add(new CourseExportVO("数学",teacher1,students1));
courseList.add(new CourseExportVO("语文",teacher2,students2));

配置sheet的map信息:

sheetMap= Maps.newHashMap();
sheetMap.put("title",new ExportParams("学生数据", "学生课程表"));
sheetMap.put("entity",CourseExportVO.class);
sheetMap.put("data",courseList);

将该sheet map信息添加到list对象中:

exportParamList.add(sheetMap);

自此又添加了一个sheet了。

最后执行导出代码:

ExcelUtil.exportExcel(exportParamList,"数据汇总导出.xlsx",response);

以上整个的代码如下:

@GetMapping("/exportExcel2")
public void exportExcel2(HttpServletResponse response) throws IOException {
    //多sheet对list对象
    List<Map<String, Object>> exportParamList = Lists.newArrayList();

    // 模拟数据
    List<UserExportVO> users = new ArrayList<>();
    users.add(new UserExportVO("悟纤",1,new Date(),"18688888888","1688@qq.com",null,"公众号SpringBoot"));
    users.add(new UserExportVO("师傅",1,new Date(),"18666666666","1888@qq.com",null,"公众号SpringBoot"));

    Map<String, Object> sheetMap = Maps.newHashMap();
    sheetMap.put("title",new ExportParams("用户数据", "用户信息"));
    sheetMap.put("entity",UserExportVO.class);
    sheetMap.put("data",users);
    exportParamList.add(sheetMap);


    // ==========   模拟数据
    //1. 学生数据
    List<StudentExportVO> students1 = new ArrayList<>();
    students1.add(new StudentExportVO("001","悟纤",1,new Date()));
    students1.add(new StudentExportVO("002","刘亦菲",0,new Date()));
    students1.add(new StudentExportVO("003","赵丽颖",0,new Date()));

    List<StudentExportVO> students2 = new ArrayList<>();
    students2.add(new StudentExportVO("001","刘诗诗",1,new Date()));
    students2.add(new StudentExportVO("002","迪丽热巴",0,new Date()));
    students2.add(new StudentExportVO("003","杨幂",0,new Date()));

    //2.老师数据.
    TeacherExportVO teacher1 = new TeacherExportVO("林老师");
    TeacherExportVO teacher2 = new TeacherExportVO("王老师");

    //3.课程数据以及关联数据.
    List<CourseExportVO> courseList = new ArrayList<>();
    courseList.add(new CourseExportVO("数学",teacher1,students1));
    courseList.add(new CourseExportVO("语文",teacher2,students2));

    sheetMap= Maps.newHashMap();
    sheetMap.put("title",new ExportParams("学生数据", "学生课程表"));
    sheetMap.put("entity",CourseExportVO.class);
    sheetMap.put("data",courseList);
    exportParamList.add(sheetMap);

    ExcelUtil.exportExcel(exportParamList,"数据汇总导出.xlsx",response);
}

运行代码,进行测试:

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇_excel_08

So wonderful,看着这帅气的表格导出,我真的是太有才了~,在怎么复杂的需求也难不倒我了。


我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。


举报

相关推荐

Spring Boot整合Easypoi

EasyPOI实现excel文件导出

0 条评论