实战分享之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…...
金字塔原理(思考的逻辑)
前言:前面学习了表达的逻辑,那在表达之前,如何组织内容?如何进行思考?接下来看第二篇——思考的逻辑。 目录 应用逻辑顺序 时间顺序 结构顺序 程度顺序 概括各组思想 什么是概括? 思想表达方式 如…...
机器学习之前向传播(Forward Propagation)和反向传播(Back propagation)
前向传播(Forward Propagation)和反向传播(Back propagation)是深度学习中神经网络训练的两个关键步骤。 前向传播(Forward Propagation): 定义:前向传播是指从神经网络的输入层到输…...

Matlab高光谱遥感数据处理与混合像元分解实践技术
光谱和图像是人们观察世界的两种方式,高光谱遥感通过“图谱合一”的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测。以高光谱遥感为核心,构建…...

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,我们往往不能直接 new 出来,这些 Bean 如果需要注册到 Spring 容器中,我们就需要使用工厂类。 比如我们项目中经常使用的okhttp: 如果我们想把OkHttpClient注册到Spring容器中,该怎么做? …...

WPF网格拖动自动布局效果
WPF网格拖动自动布局效果 使用Canvas和鼠标相关事件实现如下的效果: XAML代码: <Window x:Class="CanvasTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:...
肯德尔秩相关系数(Kendall‘s Tau)排名
肯德尔秩相关系数(Kendall’s Tau)是一种用于衡量两个排列之间相似性的统计指标,它考虑了元素之间的顺序关系而不考虑具体数值。该系数被广泛用于排序、排名和比较不同实验结果的相关性等领域。 具体而言,肯德尔秩相关系数衡量了…...

电脑怎么把视频转换gif动图?视频生成gif的操作步骤
如果你也想把一些精彩的视频转gif图片(https://www.gif.cn)的话,今天的文章你可千万不要错过,利用专业的视频转gif工具,轻松在线视频转gif,操作简单又方便,支持电脑、手机双端操作,赶…...
使用 docker 搭建 granfana+prometheus 监控平台监控测试服务器资源
互联网发展的今天,人们对互联网产品的用户体验要求也越来越高,企业为了能提供更优质的用户体验,就会绞尽脑汁想尽各种办法。而对于服务器的资源监控,搭建一个资源监控平台,就是一个很好的维护优质服务的保障平台。利用…...

一、MQ的基本概念
1、初识MQ MQ全称是Message Queue,消息队列,多用于系统之间进行异步通信。队列的概念数据结构中有详细介绍过,先进先出,消息队列就是存储消息的数据结构。 同步调用和异步调用两者之间的区别: 同步调用:发…...
Android面试题:MVC、MVP、MVVM
MVC模式: MVC结构: 1.MVC(Model-View-Controller) 2.Model:对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算,变更等操作也是必须放在的该层的。 3.View:主要包括一下View及ViewGroup控件,可以是…...
vue js 回调函数 异步处理 为什么要 let that = this
1 异步就是开个事务(只有主线程 等主线程空闲),用that 值 做处理,然后返回处理结果,而that的值是开启事务那一刻的this的值.而在主线程处理的时候,this的一直在变化, that的值保留在那一刻 ps 或是将本obj 传递给其他的obj使用处理 ps 开启新事务或开启新子线程都是 在新的ob…...
前端面试:【算法与数据结构】常见数据结构解析
在计算机科学中,数据结构是组织和存储数据的方式。精通常见的数据结构对于解决计算机科学和编程问题至关重要。本文将深入探讨常见的数据结构:数组、链表、栈、队列和哈希表,以帮助你建立坚实的数据结构基础。 1. 数组(Array&…...

RTSP/Onvif视频服务器EasyNVR安防视频云服务平台出现崩溃并重启的情况解决方案
EasyNVR安防视频云服务平台的特点是基于RTSP/Onvif协议将前端设备统一接入,在平台进行转码、直播、处理及分发,在安防监控场景中,EasyNVR可实现实时监控、云端录像、云存储、告警、级联等视频能力,极大满足行业的视频监控需求。 有…...
软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计
软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计 一、计算机网络安全性设计相关知识点二、摘要三、正文四、总结一、计算机网络安全性设计相关知识点 软考高级系统架构设计师:计算机网络...

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

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

javaee idea创建maven项目,使用el和jstl
如果使用el表达式出现下图问题 解决办法 这是因为maven创建项目时,web.xml头部声明默认是2.3,这个默认jsp关闭el表达式 办法1 在每个需要用到el和jstl的页面的上面加一句: <% page isELIgnored"false" %> 方法2 修改web.xml文件开…...
同一个服务器发布两个前端(网站)
一开始怎么设置都是505,后来把网站文件的位置换到原已经发布成功的网站位置,就成功了。考虑应该是权限问题 server {listen 80;server_name localhost;# https配置参考 start#listen 443 ssl;# 证书直接存放 /docker/nginx/cert/ 目录下即…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...