Springboot集成easypoi实现excel多sheet导出
1.环境配置
<!--easypoi依赖,excel导入导出-->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>
2.先来定义两个导出数据的实体类
 ExcelUser.java
public class Dept{
  @Excel(name = "部门编号", width = 30 , needMerge = true)
  private Integer id;
  @Excel(name = "部门名称", width = 30 , needMerge = true)
  private String deptName;
  @ExcelCollection(name = "员工信息")
  private List<EmpUtil> emps;
	....省略getter、setter方法
ExcelLog.java
public class ExcelLog{
  @Excel(name = "序号", width = 30, isColumnHidden = true)
  private Integer id;
  @Excel(name = "员工姓名", width = 30, groupName = "基本信息")
  private String empName;
  @Excel(name = "年龄", width = 30, type = 10, groupName = "基本信息")
  private Integer age;
  @Excel(name = "入职时间", width = 30, groupName = "工作信息", format = "yyyy/MM/dd HH:mm")
  private Date hiredate;
  @Excel(name = "薪酬", width = 30, type = 10, groupName = "工作信息")
  private BigDecimal salary;
  @Excel(name = "头像", type = 2, width = 30.0, height = 30.0, imageType = 1)
  private String image;
	....省略getter、setter方法
3.具体实现代码如下:
 UserServiceImpl.java
/**
 * excel多sheet导出
 */
@Override
public void exportSheet(HttpServletResponse response) {
	//功能描述:把同一个表格多个sheet测试结果重新输出,
    Workbook workBook = null;
    try {
        // 创建参数对象(用来设定excel的sheet1内容等信息)
        ExportParams userExportParams = new ExportParams();
        // 设置sheet得名称
        userExportParams.setSheetName("用户表");
        // 设置sheet表头名称
        userExportParams.setTitle("用户列表");
        // 创建sheet1使用得map
        Map<String, Object> userExportMap = new HashMap<>();
        // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
        userExportMap.put("title", userExportParams);
        // 模版导出对应得实体类型
        userExportMap.put("entity", Dept.class);
        //转成导出vo类型
        List<ExportExcelUser> users = this.changeType(this.list());
        // sheet1中要填充得数据
        userExportMap.put("data", users);
        //---------------------------------------
        // 创建参数对象(用来设定excel的sheet2内容等信息)
        ExportParams logInfoExportParams = new ExportParams();
        logInfoExportParams.setTitle("日志列表");
        logInfoExportParams.setSheetName("日志表");
        // 创建sheet2使用的map
        Map<String, Object> logInfoExportMap = new HashMap<>();
        logInfoExportMap.put("title", logInfoExportParams);
        logInfoExportMap.put("entity", ExcelLog.class);
        //查询log数据
        List<LogInfo> logInfoEntitys = logInfoMapper.selectList(new QueryWrapper<>());
        //转成导出vo类型
        List<ExportExcelLog> logInfos = this.changeInfoType(logInfoEntitys);
        // sheet2中要填充得数据
        logInfoExportMap.put("data", logInfos);
        //---------------------------------------
        // 将sheet1、sheet2使用得map进行包装
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        //后续增加sheet组,则后面继续追加即可;
        sheetsList.add(userExportMap);
        sheetsList.add(logInfoExportMap);
        // 执行方法
        workBook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
        //设置编码格式
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        //设置内容类型
        response.setContentType("application/octet-stream");
        //设置头及文件命名。
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户及操作日志导出.xls", StandardCharsets.UTF_8.name()));
        //写出流
        workBook.write(response.getOutputStream());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (workBook != null) {
            try {
                //强行关流
                workBook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
导出效果:
 
通过查看源码 ExcelExportUtil.exportExcel()方法
 
可得知,进行map.put(),其中的key必须是"title",“entity"和"data”。
 已经可以在源码方法可进行查看,所以设置参数类型等,都得按照这仨个key_name 进行put赋值。
Springboot集成easypoi实现excel多sheet导出的更多相关文章
- Easypoi实现excel多sheet表导入导出功能
		
Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试 ...
 - SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入
		
1. 简介 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题 ...
 - vue  springboot利用easypoi实现简单导出
		
vue springboot利用easypoi实现简单导出 前言 一.easypoi是什么? 二.使用步骤 1.传送门 2.前端vue 3.后端springboot 3.1编写实体类(我这里是dto, ...
 - SpringBoot集成文件 - 如何使用POI导出Word文档?
		
前文我们介绍了通过Apache POI导出excel,而Apache POI包含是操作Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.所以 ...
 - SpringBoot集成文件 - 集成POI之Excel导入导出
		
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
 - SpringBoot使用Easypoi导出excel示例
		
SpringBoot使用Easypoi导出excel示例 https://blog.csdn.net/justry_deng/article/details/84842111
 - SpringBoot整合easyexcel实现Excel的导入与导出
		
导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...
 - 超级简单POI多sheet导出Excel实战
		
本章节主要基于上一章节单sheet导出的基础上进行改造实现多sheet的导出,上一章节参考地址:https://www.cnblogs.com/sunny1009/p/11437005.html 1. ...
 - 使用springboot和easypoi进行的数据导出的小案例
		
在这个案例中使用的有springboot和easypoi进行数据导出到excel中 yml文件是这样的: server: port: 8080 spring: datasource: url: jdb ...
 - SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
		
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
 
随机推荐
- 常用js 函数
			
过滤对象空值 removeEmptyValues(obj) { for (const key in obj) { ...
 - 浅谈右值引用 移动语义 完美转发 std::move std::forward,窥探模板元编程的一角
			
右值引用 移动语义 完美转发具体是什么,就不说了,网上一搜一大堆,主要介绍下std::move和std::forward std::move std::forward 查下源码,gcc版本:gcc v ...
 - 【异或运算】codeforces 1153 B. Dima and a Bad XOR
			
前言 异或运算:是一种在二进制数系统中使用的逻辑运算.它的基本规则是对两个二进制位进行比较,如果这两个位不同,则结果为 \(1\):如果相同,则结果为 \(0\). 异或运算的规则 \(0\) XOR ...
 - 01编程语言简介与C++
			
编程语言是编程的工具 计算机系统是分层的 图1: 图2: 编程语言是软件,也是分层的 图3: 图4: 图5: 图6: visual studio.vscode .dev-c++是三种用于C++编程的集 ...
 - Flutter List映射获取索引
			
List映射获取索引 通常用List映射时只能获取到element而不能获取到索引,比如 return data.map((e) => Media.fromJson(e as Map<St ...
 - Qt/C++路径轨迹回放/回放每个点信号/回放结束信号/拿到移动的坐标点经纬度
			
一.前言说明 在使用百度地图的路书功能中,并没有提供移动的信号以及移动结束的信号,但是很多时候都期望拿到移动的哪里了以及移动结束的信号,以便做出对应的处理,比如结束后需要触发一些对应的操作.经过搜索发 ...
 - Qt编写安防视频监控系统23-图片地图
			
一.前言 图片地图这个模块是后面新增加进去的,主要是安防领域还有很多应用场景是一个区域比如就一个学校,提供一个学校的平面图或者鸟瞰图,然后在该地图上放置对应的摄像机,双击该摄像机图标可以查看对应的实时 ...
 - Python包管理不再头疼:uv工具快速上手
			
Python 包管理生态中存在多种工具,如 pip.pip-tools.poetry.conda 等,各自具备一定功能. 而今天介绍的uv 是 Astral 公司推出的一款基于 Rust 编写的 Py ...
 - 即时通讯技术文集(第36期):《跟着源码学IM》系列专题 [共12篇]
			
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第36 期. [-1-] 跟着源码学IM(一):手把手教你用Netty实现心跳机制.断线重连机制 ...
 - 阿里IM技术分享(七):闲鱼IM的在线、离线聊天数据同步机制优化实践
			
本文由阿里闲鱼技术团队书闲分享,原题"如何有效缩短闲鱼消息处理时长",有修订和改动,感谢作者的分享. 1.引言 闲鱼技术团队围绕IM这个技术范畴,已经分享了好几篇实践性总结文章,本 ...