SpringBoot结合easypoi.excel,实现数据导出Excel

大多数业务项目中必然会遇到的一个需求,导出数据文件---Excel。

这里简单贴一下自己开发使用的方式方法,抛砖引玉。

也可小白直接大胆食用。

功能Maven依赖:

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.5.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.5.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.5.0</version>
</dependency>

 业务入口controller,这里很简单

@GetMapping("/exportApply")public void exportApply(BusBasicFlowQuery query, HttpServletResponse response,@RequestHeader(required = false) String lang) throws IOException {query.setSize(20000);// query:这里就是个查询条件,根据个人业务实操就行// 这里就是根据业务需求查询出想要导出的数据集合信息// 重点说明一下:Bd3OrderExcel里面包好你要导出的表格列说明List<Bd3OrderExcel> bd3OrderExcelList = busBasicFlowService.exportApply(query, lang);ExportParams exportParams = new ExportParams();ExcelUtils.exportExcel(response, "北三卡申请", bd3OrderExcelList, Bd3OrderExcel.class, exportParams);}

重点说明一下Bd3OrderExcel,这个类注明的导出表格字段名称、顺序,宽度等。

package com.rdss.bus.model.excel;import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;import java.time.LocalDateTime;@Data
public class Bd3OrderExcel {private Integer id;/*** 申请人身份证号*/@Excel(name = "申请人姓名",width = 30.0)private String operatorName;/*** 申请时间*/@Excel(name = "申请时间",format = "yyyy-MM-dd HH:mm:ss", databaseFormat="yyyy-MM-dd HH:mm:ss" ,width = 30.0)private LocalDateTime applyTime;/*** 申请原因*/@Excel(name = "申请原因",width = 20.0)private String remark;/*** 申请人手机号*/@Excel(name = "申请人手机号",width = 20.0)private String operatorMobile;/*** 申请人身份证号*/@Excel(name = "申请人身份证号",width = 30.0)private String operatorIdcardNum;/*** 申请人邮箱*/@Excel(name = "申请人邮箱",width = 30.0)private String operatorEmail;/*** 申请人机构*/@Excel(name = "申请人机构",width = 30.0)private String operatorOrgName;/*** 审批结果(0-审核中,1-通过,2-不通过*/@Excel(name = "一级审批状态",dict = "approval_result",width = 15.0)private String approveResult_first;/*** 审批人姓名*/@Excel(name = "一级审批人姓名",width = 30.0)private String approveUserName_first;
}

导出封装工具类:

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.rdss.bus.service.handler.DictHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;/*** excel工具类*/
@Slf4j
public class ExcelUtils {private ExcelUtils(){}@Autowiredprivate static DictHandler dictHandler;/*** Excel导出** @param response      response* @param fileName      文件名* @param list          数据List* @param pojoClass     对象Class*/public static void exportExcel(HttpServletResponse response, String fileName, Collection<?> list, Class<?> pojoClass, ExportParams exportParams ) throws IOException {exportParams.setStyle(ExcelStyleUtil.class);Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");ServletOutputStream out = response.getOutputStream();workbook.write(out);out.flush();}/*** Excel导出,先sourceList转换成List<targetClass>,再导出** @param response      response* @param fileName      文件名* @param sourceList    原数据List* @param targetClass   目标对象Class*/public static void exportExcelToTarget(HttpServletResponse response, String fileName, Collection<?> sourceList,Class<?> targetClass) throws IllegalAccessException, InstantiationException, IOException {List<Object> targetList = new ArrayList<>(sourceList.size());for(Object source : sourceList){Object target = targetClass.newInstance();BeanUtils.copyProperties(source, target);targetList.add(target);}exportExcel(response, fileName, targetList, targetClass, new ExportParams());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql8.x 新增一个端口映射到当前服务(Windows)

1. 查看当前端口是否被占用。 netstat ano | findstr 33061 2.端口映射. netsh interface portproxy add v4tov4 listenport33061 listenaddress0.0.0.0 connectport3306 connectaddress192.168.1.xx 3. 创建一个用户&#xff08; myuser% %指的是所有IP都能访问&#xf…

17 敏捷开发—Scrum(2)

从上一篇 「16 敏捷开发实践&#xff08;1&#xff09;」中了解了Scrum是一个用于开发和维护复杂产品的框架&#xff0c;是一个增量的、迭代的开发过程。一般由多个Sprint&#xff08;迭代冲刺&#xff09;组成&#xff0c;每个Sprint长度一般为2-4周。下面全面介绍Scrumde 角色…

使用umi作为模板如何实现权限管理

三种权限管理的方法&#xff1a; 在做后台管理系统时&#xff0c;难免会使用到权限管理&#xff0c;权限管理方式有三种&#xff0c;分别是&#xff1a;路由、守卫、后端配合。 路由&#xff1a;通过动态路由&#xff0c;根据登录人员不同注册不同的路由&#xff0c;直接让没…

PostgreSQL 数据库 安装

1、官网下载 起源与发展&#xff1a;PostgreSQL最初起源于加州大学伯克利分校的Postgres项目&#xff0c;该项目始于1986年&#xff0c;并一直演进到1994年。在1995年&#xff0c;Postgres项目增加了SQL翻译程序&#xff0c;并更名为Postgres95。随后&#xff0c;在1996年&…

Linux:core文件无法生成排查步骤

1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0&#xff0c;就临时添加环境变量ulimit -c unlimited&#xff0c;之后在启动程序观察是否有core生成&#xff0c;如果…

Linux网络:传输层协议TCP(一)

目录 一、TCP协议的定义 二、确认应答机制ACK 三、序号、确认序号 四、超时重传机制 一、TCP协议的定义 TCP 全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传 输进行一个详细的控制; TCP 协议段格式 • 源/目的端口号: 表示数据…

GO发票真伪批量查验方法、数电票查验接口

“教”给机器标注数据的正确率就决定了人工智能判断的正确率。翔云人工智能开放平台的OCR产品经过我们的开发人员精心调“教”&#xff0c;识别率高、识别速度快。 发票&#xff0c;是发生的成本、费用或收入的原始凭证。于公司来说&#xff0c;发票主要是公司做账的依据&…

解决Windows 11更新错误0x800f081f的详细指南

在尝试更新Windows 11时&#xff0c;用户可能会遇到各种错误代码&#xff0c;其中之一是0x800f081f。这个错误通常与Windows更新组件或系统文件的损坏有关。本文将提供解决这一特定错误的详细步骤&#xff0c;并解释可能的原因。 错误代码0x800f081f概述 错误代码0x800f081f指…

【Devops系统】如何构建Devops系统

什么是Devops DevOps是一种软件开发和文化实践&#xff0c;它强调软件开发&#xff08;Dev&#xff09;和IT运营&#xff08;Ops&#xff09;之间的紧密合作与沟通。DevOps的目标是通过自动化软件的集成、测试、部署和监控来简化流程&#xff0c;从而加快软件交付的速度&#x…

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数&#xff1a; import pygame import time import random 游戏源码&#xff1a; import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

代码随想录算法训练营第四十四天|99.岛屿数量 100.岛屿的最大面积

99.岛屿数量 深搜 class Solution:def numIslands(self, grid: List[List[str]]) -> int:def dfs(i, j):if not 0 < i < m or not 0 < j < n or grid[i][j] "0":returngrid[i][j] "0"for x,y in (i1,j),(i-1,j),(i,j1),(i,j-1):dfs(x,y)…

新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

苹果CMS2022新版海螺影视主题M3.1版本&#xff0c;这个主题我挺喜欢的&#xff0c;之前也有朋友给我提供过原版主题&#xff0c;一直想要破解但是后来找了几个SG11解密的大哥都表示解密需要大几百大洋&#xff0c;所以一直被搁置了。这个版本是完全解密的&#xff0c;无需SG11加…

Oracle对数据库行和数据库的监控

前言&#xff1a; Oracle对表的监控分为数据行修改DML的监控、对表的DDL监控 1、对表的DML监控&#xff08;数据的增删改&#xff09; -- 创建测试表 create table tab_test01( id varchar2(100) default sys_guid(), name varchar2(100), insert_date date default sysdate…

学习日记:数据类型2

目录 1.转义字符 2.隐式类型转换 2.1 强制类型转换 2.2 不同类型间赋值 3.运算符 表达式 3.1 算术运算符 3.2 算术运算优先级 3.3 赋值运算 3.3.1 不同类型间混合赋值 3.4 逗号运算 4.生成随机数 5. 每日一练 1.转义字符 \n 表示换行 \t …

基于JSP、java、Tomcat三者的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 首先我们打开页面&#xff0c;准备搭建项目的初始准备 1.New Project 2.随后点击Next&#xff0c;勾…

Easy es问题总结

官网教程&#xff1a;https://www.easy-es.cn/pages/ac41f0/#settings 一 测试项目 1 pom <dependencies><!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><dependency><groupId>org.springframework.boot</groupId><artifa…

【Golang 面试基础题】每日 5 题(七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

脊髓小伙伴必看!超全维生素补给站,助力你的每一天活力满满✨

今天咱们来聊聊一个既严肃又暖心的话题——脊髓损伤后的维生素大补帖&#xff01;&#x1f31f; 记住&#xff0c;身体是革命的本钱&#xff0c;补充对的维生素&#xff0c;就是给自己的小宇宙加油哦&#xff01;&#x1f680; 首先&#xff0c;维生素D小太阳&#x1f31e;来啦…

Nestjs使用Redis的最佳实践

前几天在项目中有用到Redis JWT实现服务端对token的主动删除(退出登录功能)。故此介绍下如何在Nestjs中使用Redis&#xff0c;并做下总结。 知识准备 了解Redis - 网上很多简介。了解Nestjs如何使用jwt生成token - 可移步看下我之前的文章 效果展示 一、mac安装与使用 示…

在Webpack中,常见的loader有哪些?

在Webpack中&#xff0c;有许多常见的Loader用于处理不同类型的文件。以下是一些常见的Loader及其主要作用&#xff1a; babel-loader&#xff1a;用于将ES6/ES7等新版本的JavaScript代码转换为向后兼容的旧版本JavaScript代码&#xff0c;以确保在不支持新特性的浏览器…