当前位置: 首页 > news >正文

实战分享之springboot+easypoi快速业务集成

        1.依赖引入

<!--引入EasyPOI--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.1.0</version></dependency>

        2.封装easypoi工具类

package com.wzz.utils;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;/*** Excel导入导出工具类* @author pangu*/
public class ExcelUtil {/*** 导出工具类* @param list* @param title* @param sheetName* @param pojoClass* @param fileName* @param isCreateHeader* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, boolean isCreateHeader, HttpServletResponse response){ExportParams exportParams = new ExportParams(title, sheetName);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** 导出工具类* @param list* @param title* @param sheetName* @param pojoClass* @param fileName* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName,HttpServletResponse response){ExportParams exportParams = new ExportParams(title, sheetName);exportParams.setStyle(ExcelStyleUtil.class);defaultExport(list, pojoClass, fileName, response, exportParams);}public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){defaultExport(list, fileName, response);}private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName,HttpServletResponse response, ExportParams exportParams) {//TODO设置标题颜色Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);if (workbook != null); downLoadExcel(fileName, response, workbook);}private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));workbook.write(response.getOutputStream());} catch (IOException e) {//throw new NormalException(e.getMessage());}}private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);if (workbook != null);downLoadExcel(fileName, response, workbook);}public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){if (StringUtils.isBlank(filePath)){return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);}catch (NoSuchElementException e){//throw new NormalException("模板不能为空");} catch (Exception e) {e.printStackTrace();//throw new NormalException(e.getMessage());} return list;}public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){if (file == null){ return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);}catch (NoSuchElementException e){// throw new NormalException("excel文件不能为空");} catch (Exception e) {//throw new NormalException(e.getMessage());System.out.println(e.getMessage());}return list;}}

        3.Controller层直接调用

/*** 导出Excel   excelVo* 注意这里暂时只能用get方法,不能用post*/@GetMapping("/exportExcel")@ApiOperation("根据过滤条件导出excel数据")public void exportExcel(HttpServletResponse response,@RequestParam(name = "pageNo") int pageNo,@RequestParam("pageSize") int pageSize,@RequestParam(name = "unit",required = false) String unit,@RequestParam(name = "username",required = false) String username,@RequestParam(name = "truename",required = false) String truename,@RequestParam(name = "date",required = false) String date) throws IOException {Evorecorddto queryInfo = new Evorecorddto();queryInfo.setPageNo(pageNo);queryInfo.setPageSize(pageSize);if (unit !=null){queryInfo.setUnit(unit);}if (username!=null){queryInfo.setUsername(username);}if (truename!=null){queryInfo.setTruename(truename);}if (date!=null){ObjectMapper objectMapper = new ObjectMapper();Evorecorddto.DateRange dateRange = objectMapper.readValue(date, Evorecorddto.DateRange.class);queryInfo.setDate(dateRange);}// 查询所有答题用户列表List<excelVo> records = evaluationService.excelprint(queryInfo);ExcelUtil.exportExcel(records, null, "答题排名", excelVo.class, "答题排名", response);}

另外需要修改excel导出颜色的话可以修改官方提供的接口

        4.修改接口

package com.wzz.utils;import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;/*** @author:Kevin* @create: 2023-08-24 10:14* @Description:*/public class ExcelStyleUtil implements IExcelExportStyler {// 数据行类型private static final String DATA_STYLES = "dataStyles";// 标题类型private static final String TITLE_STYLES = "titleStyles";//数据行样式private CellStyle styles;// 标题样式private CellStyle titleStyle;public ExcelStyleUtil(Workbook workbook) {this.init(workbook);}private void init(Workbook workbook) {this.styles = initStyles(workbook);this.titleStyle = initTitleStyle(workbook);}@Overridepublic CellStyle getHeaderStyle(short i) {return null;}@Overridepublic CellStyle getTitleStyle(short i) {return titleStyle;}@Overridepublic CellStyle getStyles(boolean b, ExcelExportEntity excelExportEntity) {return styles;}@Overridepublic CellStyle getStyles(Cell cell, int i, ExcelExportEntity excelExportEntity, Object o, Object o1) {return getStyles(true,excelExportEntity);}@Overridepublic CellStyle getTemplateStyles(boolean b, ExcelForEachParams excelForEachParams) {return null;}/*** 初始化--标题行样式* @param workbook* @return*/private CellStyle initTitleStyle(Workbook workbook) {return buildCellStyle(workbook,TITLE_STYLES);}/*** 初始化--数据行样式* @param workbook* @return*/private CellStyle initStyles(Workbook workbook) {return buildCellStyle(workbook,DATA_STYLES);}/*** 设置单元格样式* @param workbook* @param type 类型  用来区分是数据行样式还是标题样式* @return*/private CellStyle buildCellStyle(Workbook workbook,String type) {CellStyle style = workbook.createCellStyle();// 字体样式Font font = workbook.createFont();if(TITLE_STYLES.equals(type)){// 背景色style.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);font.setFontHeightInPoints((short)12);font.setBold(true);font.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex());}if(DATA_STYLES.equals(type)){font.setFontHeightInPoints((short)10);}font.setFontName("Courier New");style.setFont(font);// 设置底边框style.setBorderBottom(BorderStyle.THIN);// 设置左边框style.setBorderLeft(BorderStyle.THIN);// 设置右边框;style.setBorderRight(BorderStyle.THIN);// 设置顶边框;style.setBorderTop(BorderStyle.THIN);// 设置底边颜色style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());// 设置左边框颜色;style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());// 设置右边框颜色;style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());// 设置顶边框颜色;style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());// 设置自动换行;style.setWrapText(false);// 设置水平对齐的样式为居中对齐;style.setAlignment(HorizontalAlignment.CENTER);// 设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(VerticalAlignment.CENTER);return style;}}

相关文章:

实战分享之springboot+easypoi快速业务集成

1.依赖引入 <!--引入EasyPOI--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</group…...

金字塔原理(思考的逻辑)

前言&#xff1a;前面学习了表达的逻辑&#xff0c;那在表达之前&#xff0c;如何组织内容&#xff1f;如何进行思考&#xff1f;接下来看第二篇——思考的逻辑。 目录 应用逻辑顺序 时间顺序 结构顺序 程度顺序 概括各组思想 什么是概括&#xff1f; 思想表达方式 如…...

机器学习之前向传播(Forward Propagation)和反向传播(Back propagation)

前向传播&#xff08;Forward Propagation&#xff09;和反向传播&#xff08;Back propagation&#xff09;是深度学习中神经网络训练的两个关键步骤。 前向传播&#xff08;Forward Propagation&#xff09;&#xff1a; 定义&#xff1a;前向传播是指从神经网络的输入层到输…...

Matlab高光谱遥感数据处理与混合像元分解实践技术

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…...

Docker consul的容器服务注册与发现

前言一、服务注册与发现二、consul 介绍三、consul 部署3.1 consul服务器3.1.1 建立 Consul 服务3.1.2 查看集群信息3.1.3 通过 http api 获取集群信息 3.2 registrator服务器3.2.1 安装 Gliderlabs/Registrator3.2.2 测试服务发现功能是否正常3.2.3 验证 http 和 nginx 服务是…...

Spring注入外部 工厂类Bean

问题 对于一些使用建造者模式的 Bean&#xff0c;我们往往不能直接 new 出来&#xff0c;这些 Bean 如果需要注册到 Spring 容器中&#xff0c;我们就需要使用工厂类。 比如我们项目中经常使用的okhttp: 如果我们想把OkHttpClient注册到Spring容器中&#xff0c;该怎么做? …...

WPF网格拖动自动布局效果

WPF网格拖动自动布局效果 使用Canvas和鼠标相关事件实现如下的效果: XAML代码: <Window x:Class="CanvasTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:...

肯德尔秩相关系数(Kendall‘s Tau)排名

肯德尔秩相关系数&#xff08;Kendall’s Tau&#xff09;是一种用于衡量两个排列之间相似性的统计指标&#xff0c;它考虑了元素之间的顺序关系而不考虑具体数值。该系数被广泛用于排序、排名和比较不同实验结果的相关性等领域。 具体而言&#xff0c;肯德尔秩相关系数衡量了…...

电脑怎么把视频转换gif动图?视频生成gif的操作步骤

如果你也想把一些精彩的视频转gif图片&#xff08;https://www.gif.cn&#xff09;的话&#xff0c;今天的文章你可千万不要错过&#xff0c;利用专业的视频转gif工具&#xff0c;轻松在线视频转gif&#xff0c;操作简单又方便&#xff0c;支持电脑、手机双端操作&#xff0c;赶…...

使用 docker 搭建 granfana+prometheus 监控平台监控测试服务器资源

互联网发展的今天&#xff0c;人们对互联网产品的用户体验要求也越来越高&#xff0c;企业为了能提供更优质的用户体验&#xff0c;就会绞尽脑汁想尽各种办法。而对于服务器的资源监控&#xff0c;搭建一个资源监控平台&#xff0c;就是一个很好的维护优质服务的保障平台。利用…...

一、MQ的基本概念

1、初识MQ MQ全称是Message Queue&#xff0c;消息队列&#xff0c;多用于系统之间进行异步通信。队列的概念数据结构中有详细介绍过&#xff0c;先进先出&#xff0c;消息队列就是存储消息的数据结构。 同步调用和异步调用两者之间的区别&#xff1a; 同步调用&#xff1a;发…...

Android面试题:MVC、MVP、MVVM

MVC模式&#xff1a; MVC结构&#xff1a; 1.MVC(Model-View-Controller) 2.Model:对数据库的操作、对网络等的操作都应该在Model里面处理&#xff0c;当然对业务计算&#xff0c;变更等操作也是必须放在的该层的。 3.View:主要包括一下View及ViewGroup控件&#xff0c;可以是…...

vue js 回调函数 异步处理 为什么要 let that = this

1 异步就是开个事务(只有主线程 等主线程空闲),用that 值 做处理,然后返回处理结果,而that的值是开启事务那一刻的this的值.而在主线程处理的时候,this的一直在变化, that的值保留在那一刻 ps 或是将本obj 传递给其他的obj使用处理 ps 开启新事务或开启新子线程都是 在新的ob…...

前端面试:【算法与数据结构】常见数据结构解析

在计算机科学中&#xff0c;数据结构是组织和存储数据的方式。精通常见的数据结构对于解决计算机科学和编程问题至关重要。本文将深入探讨常见的数据结构&#xff1a;数组、链表、栈、队列和哈希表&#xff0c;以帮助你建立坚实的数据结构基础。 1. 数组&#xff08;Array&…...

RTSP/Onvif视频服务器EasyNVR安防视频云服务平台出现崩溃并重启的情况解决方案

EasyNVR安防视频云服务平台的特点是基于RTSP/Onvif协议将前端设备统一接入&#xff0c;在平台进行转码、直播、处理及分发&#xff0c;在安防监控场景中&#xff0c;EasyNVR可实现实时监控、云端录像、云存储、告警、级联等视频能力&#xff0c;极大满足行业的视频监控需求。 有…...

软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计

软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计 一、计算机网络安全性设计相关知识点二、摘要三、正文四、总结一、计算机网络安全性设计相关知识点 软考高级系统架构设计师:计算机网络...

jenkins Linux如何修改jenkins 默认的工作空间workspace

由于jenkins默认存放数据的目录是/var/lib/jenkins&#xff0c;一般这个var目录的磁盘空间很小的&#xff0c;就几十G,所以需要修改jenkins的默认工作空间workspace 环境 jenkins使用yum安装的 centos 7 正题 1 查看jenkins安装路径 [rootlocalhost jenkins_old_data]# rpm…...

Mysql报错 mysqladmin flush-hosts

出现这个的原因是错误连接达到数据库设置的最大值。 此时需要释放重置连接最大值。 进入mysql使用命令 flush-hosts;环境说明&#xff1a; 内网测试服务器192.168.18.251 为WEB服务器&#xff0c;安装了mysql; 内网音视频转码服务器192.168.18.253安装了转码工具&#xff0…...

javaee idea创建maven项目,使用el和jstl

如果使用el表达式出现下图问题 解决办法 这是因为maven创建项目时&#xff0c;web.xml头部声明默认是2.3&#xff0c;这个默认jsp关闭el表达式 办法1 在每个需要用到el和jstl的页面的上面加一句: <% page isELIgnored"false" %> 方法2 修改web.xml文件开…...

同一个服务器发布两个前端(网站)

一开始怎么设置都是505&#xff0c;后来把网站文件的位置换到原已经发布成功的网站位置&#xff0c;就成功了。考虑应该是权限问题 server {listen 80;server_name localhost;# https配置参考 start#listen 443 ssl;# 证书直接存放 /docker/nginx/cert/ 目录下即…...

部署常用指南

https://docs.conda.io/en/latest/miniconda.html#installing 环境配置 安装和配置 Anaconda 安装 Anaconda。 配置镜像源&#xff1a; yaml conda配置 vim ~/.condarc channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/ - https://mirrors.tuna.ts…...

4.5 TCP优化

TCP 三次握手的性能提升 三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上&#xff0c;所以要正确使用三次握手的中参数&#xff0c;需要先用netstat命令查看是哪个握手阶段出了问题&#xff0c;主动发起连接的客户端优化相对简单些&#xff0c;而服务端需要监听端口&a…...

pdf太大怎么压缩大小?这样压缩文件很简单

工作和学习中&#xff0c;用到PDF文件的机会还是比较多的&#xff0c;但有时候PDF文件过大会给我们带来困扰&#xff0c;比如上传PDF文件时会因超出系统大小导致无法上传&#xff0c;这时候简单的解决方法就是压缩PDF文件&#xff0c;下面就来看看具体的操作方法吧~ 方法一&…...

【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板

参考&#xff1a;Linux之I2C驱动_linux i2c驱动_风间琉璃•的博客-CSDN博客​​​​​​ 目录 一、I2C驱动框架简介 1.1 I2C总线驱动 1.2 I2C设备驱动 二、I2C总线-设备-驱动模型 2.1 i2c_driver 2.2 i2c_client 2.3 I2C 设备数据收发和处理 三、Linux I2C驱动程序模板…...

【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

论文地址 Facebook的照片、视频和其他需要可靠存储和快速访问的二进制大型对象(BLOB)的语料库非常庞大&#xff0c;而且还在继续增长。随着BLOB占用空间的增加&#xff0c;将它们存储在我们传统的存储系统-- Haystack 中变得越来越低效。为了提高我们的存储效率(以Blob的有效复…...

基于亚马逊云科技服务,构建大语言模型问答知识库

随着大语言模型效果明显提升&#xff0c;其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型&#xff08;LLM&#xff09;知识召回&#xff08;Knowledge Retrieval&#xff09;的方式&#xff0c;在私域知识问答方面可以很好的弥补通…...

SpingMVC拦截器-用户登录权限控制分析

视频链接&#xff1a;08-SpringMVC拦截器-用户登录权限控制代码实现2_哔哩哔哩_bilibili 114 1、做了一个用户跟角色添加的相关操作 1.1 这个后台工程&#xff0c;没有进行相关操作也能够进行登录&#xff1a; 2、现在我做一个用户的权限控制&#xff0c;如果当前我没有进行操…...

MDTA模块(Restormer)

From a layer normalized tensor Y ∈ R H ^ W ^ C ^ \mathbf{Y} \in \mathbb{R}^{\hat{H} \times \hat{W} \times \hat{C}} Y∈RH^W^C^, our MDTA first generates query ( Q ) (\mathbf{Q}) (Q), key ( K ) (\mathbf{K}) (K) and value ( V ) (\mathbf{V}) (V) project…...

C++ 新特性 | C++ 11 | decltype 关键字

一、decltype 关键字 1、介绍 decltype 是 C11 新增的一个用来推导表达式类型的关键字。和 auto 的功能一样&#xff0c;用来在编译时期进行自动类型推导。引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景&#xff0c;在某些特殊情况下 auto 用起来很不方便&…...

2023国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…...

专业做网站服务商/华为云速建站

点击上方“蓝色字”可关注我们&#xff01;暴走时评&#xff1a;据报道&#xff0c;韩国互联网巨头Kakao集团的区块链部门Ground X将于2019年6月27日推出其区块链平台的Klaytn主网。Kakao于去年3月宣布打算推出区块链平台&#xff0c;并于10月发布了Klaytn测试网络。该平台专注…...

衡水安徽学校网站建设/学会计哪个培训机构比较正规

//以验证用户信息并提交到后台为列 function SubmitInfo() {var data {reType: "", //注册来自userID: "", //平台账号userPWD: "", //用户密码checkCode: ""//邀请码};data.userID $("#chUserID").val();data.userPWD $…...

做网站有什么用出/营销推广渠道

一对多关系算是比较常用的一种关联关系了&#xff0c;关于一对多我们可以用 文章对应评论 来举例&#xff1a;一篇文章可以有多个评论&#xff0c;但是一个评论只属于一篇文章。 这就是一对多关系。 1 实现一对多关系 我们先来准备两个模型&#xff0c;一个是文章表&#xff0c…...

网站开发费怎么做会计分录/搜索关键词排名优化软件

对象Python 中&#xff0c;一切皆对象。每个对象由&#xff1a;标识(identity)、类型(type)、value(值)组成。1. 标识用于唯一标识对象&#xff0c;通常对应于对象在计算机内存地址。使用内置函数 id(obj)可返回对象 obj 的标识。2. 类型用于表示对象存储的“数据”的类型。类型…...

深圳注册公司的基本流程/win10优化大师怎么样

openMVG/openMVS/bundler基于SFM的图像三维重建&#xff08;二&#xff09;Linux下使用openMVGPMVS进行三维重建1. openMVG简介2. 过程与结果1.安装openMVG2.安装PMVS-CMVS3.使用openmvg例程进行三维重建4.使用自己的图片做出来的实验效果。SFM图像三维重建&#xff08;一&…...

扁平网站 文案/公司品牌宣传

1.最典型的就是找爬虫外包活儿 网络爬虫最通常的的挣钱方式通过外包网站&#xff0c;做中小规模的爬虫项目&#xff0c;向甲方提供数据抓取&#xff0c;数据结构化&#xff0c;数据清洗等服务。新入行的程序员大多都会先尝试这个方向&#xff0c;直接靠技术手段挣钱&#xff0…...