使用easyexcel 导出多级表头demo

先看效果:

1、引入maven依赖

<!--EasyExcel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version>
</dependency>        

2、实体类

package com.huawei.it.domain;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;/*** @description: 嫁功率考勤实体类* @author: yeyong* @create: 2024-01-16*/
public class Jglkq{@ExcelProperty({"考勤状态"})private String kqzt; //考勤状态@ExcelProperty({"日期"})@ColumnWidth(20)private String rq; //日期@ExcelProperty({"工号"})private String gh; //工号@ExcelProperty({"姓名"})private String xm; //姓名@ExcelProperty({"应出勤"})private String ycq; //应出勤@ExcelProperty({"实出勤"})private String scq; //实出勤@ExcelProperty({"班制名称"})private String bzmc;  //班制名称@ExcelProperty({"班一","上"})private String sw; //上@ExcelProperty({"班一","下"})private String xw; //下@ExcelProperty({"平时加班"})private String psjb; //平时加班@ExcelProperty({"假日加班"})private String jrjb; //假日加班@ExcelProperty({"周六排班8小时"})private String str1; //周六排班8小时@ExcelProperty({"周六超8小时"})private String str2; //周六超8小时//忽略这个字段@ExcelIgnoreprivate String IsNight;  //是否夜班  0:否  1:是public String getKqzt() {return kqzt;}public void setKqzt(String kqzt) {this.kqzt = "正常";}public String getRq() {return rq;}public void setRq(String rq) {this.rq = rq;}public String getGh() {return gh;}public void setGh(String gh) {this.gh = gh;}public String getXm() {return xm;}public void setXm(String xm) {this.xm = xm;}public String getYcq() {return ycq;}public void setYcq(String ycq) {this.ycq = ycq;}public String getScq() {return scq;}public void setScq(String scq) {this.scq = scq;}public String getBzmc() {return bzmc;}public void setBzmc(String bzmc) {this.bzmc = bzmc;}public String getSw() {return sw;}public void setSw(String sw) {this.sw = sw;}public String getXw() {return xw;}public void setXw(String xw) {this.xw = xw;}public String getPsjb() {return psjb;}public void setPsjb(String psjb) {this.psjb = psjb;}public String getJrjb() {return jrjb;}public void setJrjb(String jrjb) {this.jrjb = jrjb;}public String getStr1() {return str1;}public void setStr1(String str1) {this.str1 = str1;}public String getStr2() {return str2;}public void setStr2(String str2) {this.str2 = str2;}public String getIsNight() {return IsNight;}public void setIsNight(String isNight) {IsNight = isNight;}}

3、web导出 controller

package com.huawei.web.controller.it;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.merge.LoopMergeStrategy;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
import com.huawei.common.core.controller.BaseController;
import com.huawei.common.core.page.TableDataInfo;
import com.huawei.common.utils.poi.MonthSheetWriteHandler;
import com.huawei.it.domain.DemoData;
import com.huawei.it.domain.Jglkq;
import com.huawei.it.service.JglkqService;
import org.apache.poi.ss.usermodel.*;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** @description:* @author: yeyong* @create: 2024-01-16*/
@Controller
@RequestMapping("/hr/jglkq")
public class JglkqController extends BaseController {private String prefix = "it/hr";@Autowiredprivate JglkqService jglkqService;//使用easyExcel导出@GetMapping("/export")public void easyExcelExport(HttpServletResponse response,Jglkq jglkq){//备注:使用easyExcel导出多级表头try {//准备数据List<Jglkq> kqList =new ArrayList<Jglkq>();List<Jglkq> list = jglkqService.selectJglkqList(jglkq);for (Jglkq kq1 : list) {Jglkq kq = new Jglkq();kq.setKqzt(kq1.getKqzt());  //考勤状态kq.setRq(kq1.getRq()); //日期kq.setGh(kq1.getGh());  //工号kq.setXm(kq1.getXm());  //姓名kq.setYcq("1");  //应出勤kq.setScq("1");  //实出勤kq.setBzmc(kq1.getBzmc());  //班制名称kq.setSw(kq1.getSw());  //上班kq.setXw(kq1.getXw());   //下班kq.setPsjb(kq1.getPsjb());  //平时加班kq.setJrjb(kq1.getJrjb());  //假日加班kq.setStr1(kq1.getStr1());  //kq.setStr2(kq1.getStr2());  //kqList.add(kq);}//response.setContentType("application/vnd.ms-excel");response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setCharacterEncoding("utf-8");//StringBuffer bigTitle = new StringBuffer("考勤结果明细查询");//String fileName = URLEncoder.encode(bigTitle.toString(), "UTF-8")+ ".xlsx";String fileName = System.currentTimeMillis()+".xlsx";response.setHeader("Content-disposition", "attachment;filename=" + fileName);// 头的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());// 默认设置为水平居中WriteCellStyle contentWriteCellStyle = new WriteCellStyle();contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);contentWriteCellStyle.setBorderRight(BorderStyle.THIN);contentWriteCellStyle.setBorderTop(BorderStyle.THIN);// 这里需要设置不关闭流EasyExcel.write(response.getOutputStream(), Jglkq.class)//.autoCloseStream(Boolean.FALSE).registerWriteHandler(horizontalCellStyleStrategy).sheet("考勤结果明细查询").relativeHeadRowIndex(1)//设置拦截器或自定义样式.registerWriteHandler(new MonthSheetWriteHandler()).registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle)).doWrite(kqList);} catch (IOException e) {e.printStackTrace();}}}

4、在拦截器中对表头的样式进行自定义的覆盖

package com.huawei.common.utils.poi;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;/*** @description:  表头设置拦截器* @author: yeyong* @create: 2024-01-17*/
public class MonthSheetWriteHandler implements SheetWriteHandler {@Overridepublic void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder)   {Workbook workbook = writeWorkbookHolder.getWorkbook();Sheet sheet = workbook.getSheetAt(0);Row row1 = sheet.createRow(0);row1.setHeight((short) 800);Cell cell = row1.createCell(0);//设置标题cell.setCellValue("考勤结果明细查询" );CellStyle cellStyle = workbook.createCellStyle();cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellStyle.setAlignment(HorizontalAlignment.CENTER);Font font = workbook.createFont();font.setBold(true);font.setFontHeight((short) 400);font.setFontName("宋体");cellStyle.setFont(font);cell.setCellStyle(cellStyle);sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, 15));}}

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

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

相关文章

Spring框架面试题

目录 1.Spring中bean的生命周期 2.Spring中bean的循环依赖 3.SpringMVC执行流程 4.Springboot自动装配原理 5.Spring框架常见注解(Spring、Springboot、SpringMVC) 6.mybatis执行流程 7.mybatis延迟加载使用及原理 8.mybatis一级、二级缓存 1.Spring中bean的生命周期 2.…

Unity向量叉乘

叉乘计算公式 Unity中叉乘计算 Vector3.Cross(A.position, B.position); 几何意义 假设向量A和B 都在XZ平面上 向量A叉乘向量B y大于0 证明 B在A右侧 y小于0 证明 B在A左侧 示例 Vector3 C Vector3.Cross(A.position, B.position); if(C.y > 0) {print("B在A右侧&qu…

rust跟我学六:虚拟机检测

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎么检测是否在虚拟机里运行的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:…

网络攻防和CTF有什么区别和关系?

网络攻防和CTF&#xff08;Capture The Flag&#xff09;之间存在着密切的联系和区别。在理解它们的关系之前&#xff0c;我们需要先了解每个概念的含义和特点。 网络攻防是一种针对网络系统的攻击和防御技术&#xff0c;主要涉及黑客攻击和安全防护两个方面。攻击方会利用各…

基于改进凸优化算法的多机编队突防航迹规划

源自&#xff1a;系统工程与电子技术 作者&#xff1a;刘玉杰, 李樾, 韩维, 崔凯凯 “人工智能技术与咨询” 摘要 为更好地发挥多机编队在低空突防作战中的优势, 对已有的凸优化算法进行改进, 提出一种多机编队低空突防航迹规划方法。首先, 根据低空突防任务特点进行问题建…

课表排课小程序怎么制作?多少钱?

在当今的数字化时代&#xff0c;无论是购物、支付、点餐&#xff0c;还是工作、学习&#xff0c;都离不开各种各样的微信小程序。其中&#xff0c;课表排课小程序就是许多教育机构和学校必不可少的工具。那么课表排课小程序怎么制作呢&#xff1f;又需要多少钱呢&#xff1f; …

electron+vue项目使用serialport报错Cannot read property ‘indexOf‘ of undefined解决办法

描述 使用ElectronVue项目时引入serialport串口后启动时报下面错误 Cannot read property indexOf of undefined解决方法 打开vue.config.js找到pluginOptions -> electronBuilder -> externals添加serialport module.exports {pluginOptions: {electronBuilder: {e…

MBTI+大模型=甜甜的恋爱?美国新年AI裁员潮;中国大模型人才分布图;20分钟览尽NLP百年;Transformer新手入门教程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f251; GenAI 是美国「2024 年裁员潮」罪魁祸首吗&#xff1f;来看几组数据 https://www.trueup.io/layoffs 补充一份背景&#xff1a;&#…

Javaassist:编写字节码,改变Java的命运

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Javaassist&#xff1a;编写字节码&#xff0c;改变Java的命运 前言javaassist简介基本用法高级技巧实际应用与示例与其他字节码工具的对比结语 前言 Java是一门强大的编程语言&#xff0c;但有时候&…

【印象深刻的实战经历】两次全国大学生数学建模经历分享

目录 &#x1f33c;初次接触 初次参加培训 分享培训所得 比赛开始 &#x1f525;再次接触 参加校赛 机缘巧合 再次培训 比赛开始 &#x1f4d5;技巧总结 从问题的实际意义分析大体上可分为 从问题的解决方法上分析 做国赛题目的步骤 赛前准备 选题 寻找思路…

vue二次封装ant-design-vue中的Modal弹窗组件,实现拖拽,全屏两种功能,原有参数属性不变

在我们的项目的有的地方需要用弹框的拖拽&#xff0c;以及弹窗自定义全屏显示的需求&#xff0c;所以再次将二次合一&#xff0c;同时弹框里面内容自适应屏幕高度 在ant-design-vue中&#xff0c;已经实现了拖拽&#xff0c;全屏的功能&#xff0c;下面是ant官网的示例 自定义…

开发实践6_project

要求&#xff1a; ① 页面写入超链接&#xff0c;获取所有数据item&#xff0c;显示在另一个页面&#xff0c;1min内&#xff0c;即使数据有变化&#xff0c;页面内容不变&#xff0c;1min后点击超链接可获取最新信息&#xff1b; ② 使用middleware完成用户请求路径判断 &am…

一篇综述洞悉医学大型语言模型的原理,应用和挑战

在过去的一年中&#xff0c;随着 GPT-4、LLaMA、Mistral&#xff0c;PaLM 等先进技术的突飞猛进&#xff0c;大型语言模型&#xff08;Large Language Models&#xff09;已经引领全球人工智能进入了一个全新的基础模型时代&#xff0c;这一时代不仅开启了技术创新的新篇章&…

微信小程序vue+uniapp瑜伽馆课程预约选课管理系统

本文对该站点以及对其进行了全面的剖析&#xff0c;为瑜伽馆管理系统的发展带来了借鉴。瑜伽馆管理系统小程序对于瑜伽馆起到了很好的引导作用&#xff0c;特别是对于地方瑜伽馆的处理起到了很大的作用。 按照已有的功能&#xff0c;除了管理员外&#xff0c;还可以对系统中的全…

python高级练习题库实验2(B)部分

文章目录 题目1代码实验结果题目2代码实验结果题目总结题目1 注册课程小游戏程序 研究下面的例子,并编写一个与这些例子完全相同的程序。使用for loop和break来解决问题。提示用户输入课程数量,是否选择,并且课程代码,最后还需显示已经完成的课程注册数量或者未完成的注册…

【Python3】【力扣题】389. 找不同

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;使用计数器分别统计字符串中的元素和出现次数&#xff0c;两个计数器相减&#xff0c;结果就是新添加的元素。 知识点&#xff1a;collections.Counter(...)&#xff1a;字典子类&#x…

Python算法例36 丑数Ⅱ

1. 问题描述 设计一个算法&#xff0c;找出只含素因子2、3、5的第n小的数&#xff0c;符合条件的数如&#xff1a;1、2、3、4、5、6、8、9、10、12… 2. 问题示例 如果n9&#xff0c;返回10。 3. 代码实现 def find_nth_number(n):if n < 0:return Nonenumbers [1]idx…

Azure Machine Learning - 聊天机器人构建

目录 聊天机器人架构概述消耗成本环境准备打开开发环境部署和运行将聊天应用部署到 Azure使用聊天应用从 PDF 文件获取答案使用聊天应用设置更改答复行为 本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、Azure OpenAI 服务和 Azure AI 搜索中的…

【playwright】新一代自动化测试神器playwright+python系列课程22_playwright模拟鼠标操作_悬停_右击_双击

playwright模拟鼠标操作_悬停_右击_双击 鼠标悬停 – hover() 有些元素&#xff0c;只有你鼠标移动到它那个位置上&#xff0c;他才会展开或者显示一些内容&#xff0c;这时候就要用到hover()操作了。 以个人设置这个下拉菜单&#xff0c;来看一下hover的使用。 项目实践代…

产品排名提升秘籍:亚马逊鲲鹏系统的独特优势

在亚马逊竞争激烈的市场中&#xff0c;商家们一直在寻找新的方法来提升产品排名和吸引更多的顾客。近期&#xff0c;一款名为“亚马逊鲲鹏系统”的全自动化运行软件引起了广泛关注。该软件集成了一系列独特的功能和特点&#xff0c;旨在帮助商家更轻松地管理其亚马逊业务&#…