JXLS 导出多sheet,带页眉页脚
/*** 生成多sheet Excel* 带自定义页眉页脚** @param templatePath* @param sheetList* @return* @throws IOException*/public static byte[] generateMultiSheet(String templatePath, List<JxlsHelper2.SheetContext> sheetList) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();//设置页眉页脚等布局try (InputStream is = new ClassPathResource(templatePath).getInputStream()) {XSSFWorkbook wb = new XSSFWorkbook(is);for (JxlsHelper2.SheetContext sheetContext : sheetList) {if (StringUtils.isEmpty(sheetContext.getName())) {continue;}XSSFSheet sheet = wb.getSheet(sheetContext.getName());if (sheet != null) {translateHeaderTemplate(sheet, sheetContext.getContext());}}wb.write(baos);//渲染数据ByteArrayOutputStream targetStream = new ByteArrayOutputStream();try (InputStream templateStream = new ByteArrayInputStream(baos.toByteArray())) {JxlsHelper2 jxlsHelper = JxlsHelper2.getInstance();Transformer transformer = jxlsHelper.createTransformer(templateStream, targetStream);jxlsHelper.processTemplate(sheetList, transformer);}return targetStream.toByteArray();}}
重写 package org.jxls.util.JxlsHelper;
/*** jx:area(lastCell="R3" multisheet ="sheets")** @param sheetList* @param transformer* @throws IOException*/public void processTemplate(List<SheetContext> sheetList, Transformer transformer) throws IOException {areaBuilder.setTransformer(transformer);List<Area> xlsAreaList = areaBuilder.build();for (Area xlsArea : xlsAreaList) {String sheetName = xlsArea.getStartCellRef().getSheetName();Optional<SheetContext> optional = sheetList.stream().filter(s -> Objects.equals(sheetName, s.getName())).findAny();if (optional.isPresent()) {xlsArea.applyAt(new CellRef(xlsArea.getStartCellRef().getCellName()), optional.get().getContext());}}if (processFormulas) {for (Area xlsArea : xlsAreaList) {setFormulaProcessor(xlsArea);xlsArea.processFormulas();}}if (isHideTemplateSheet()) {List<String> sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);for (String sheetName : sheetNameTemplate) {transformer.setHidden(sheetName, true);}}if (isDeleteTemplateSheet()) {List<String> sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);for (String sheetName : sheetNameTemplate) {transformer.deleteSheet(sheetName);}}transformer.write();}
增加DTO
@Data@AllArgsConstructorpublic static class SheetContext {/*** sheet name*/private String name;private Context context;}
调用:
List<JxlsHelper2.SheetContext> sheetList = new ArrayList<>();Context context = new Context();for (String key : contextMap.keySet()) {context.putVar(key, contextMap.get(key));}sheetList.add(new JxlsHelper2.SheetContext("Sheet1", context));//Map<String, Object> contextMap2 = defaultExcelReportProvider.getContextMap("7777", "333", "测试", data);Context context2 = new Context();for (String key : contextMap2.keySet()) {context2.putVar(key, contextMap2.get(key));}sheetList.add(new JxlsHelper2.SheetContext("Sheet2", context2));byte[] bytes = JxlsUtil.generateMultiSheet(getExcelTemplatePath(), sheetList);
相关文章:
JXLS 导出多sheet,带页眉页脚
/*** 生成多sheet Excel* 带自定义页眉页脚** param templatePath* param sheetList* return* throws IOException*/public static byte[] generateMultiSheet(String templatePath, List<JxlsHelper2.SheetContext> sheetList) throws IOException {ByteArrayOutputStre…...
docker数据卷详细讲解及数据卷常用命令
docker数据卷详细讲解及数据卷常用命令 Docker 数据卷是一种将宿主机的目录或文件直接映射到容器中的特殊目录,用于实现数据的持久化和共享。Docker 数据卷有以下特点: 数据卷可以在一个或多个容器之间共享和重用,不受容器的生命周期影响。…...
智能井盖传感器能不能监测井盖位移
智能井盖传感器能够精准监测井盖的位移。这些传感器运用了前沿科技对井盖状态进行实时监测。一旦井盖出现异常移动传感器会立即捕捉到信号,并通过与互联网相连接的智能系统发出警报或记录数据。这种智能监测仪为城市或相关部门的井盖管理提供了实时数据支持…...
.bashrc文件中环境变量配置错误,导致linux命令无法正常使用
问题描述 配置环境变量时出错,导致linux命令无法使用 解决方案: 执行下面命令 export PATH/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin vim就可以使用了,将错误纠正 vim ~/.bashrc 环境生效 source ~/.bashrc…...
HTML易忽略的角落【目录】
目前已有文章 **** 篇 本专栏是汇集了一些HTML常常被遗忘的知识,这里算是温故而知新,往往这些零碎的知识点,在你开发中能起到炸惊效果。我们每个人都没有过目不忘,过久不忘的本事,就让这一点点知识慢慢渗透你的脑海。 …...
mysql8.0递归
sql举例: WITH recursive c1 AS( select * from course_category where id 1-1union allselect t2.* from course_category t2 INNER JOIN c1 where t2.parentidc1.id) select * from c1 ORDER BY orderby; 解释: WITH recursive c1 AS( //相当于创…...
处理机器学习数据集中字符串列(pandas.get_dummies)
如图,在数据集中week列的数据不是数值型,会导致我们在训练过程中难以处理。 而pandas库中有一个非常好用的函数,独热编码pandas.get_dummies(df) 使用此函数之后,会在原数据中新建各列代表Fri-Sun,值为0或1ÿ…...
一个UE无法注册的问题
问题场景是环境中只有一个小区,UE在找到这个小区,收到MIB SIB1后一直不发起注册。我想这大概是和S准则不满足有关系了,这个问题基本是又没啥好看的了,太简单了,在SIB1周围找找就解决了,于是我发现了以下log…...
自媒体剪辑必备,6个音效素材网站,你值得拥有。
这6个剪辑必备的音效素材网站一定要收藏好了,有了这几个网站能让你在剪辑的时候事半功倍,还不用担心版权问题。话不多说,直接上干货。 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站ÿ…...
uniapp Android如何授权打开系统蓝牙Bluetooth?
uniapp Android如何授权打开系统蓝牙? 使用uniapp开发蓝牙项目过程中,涉及到检测手机系统蓝牙是否打开功能,这里介绍Android,iOS暂时没有找到优方法。朋友们如果有好的方案,欢迎评论分享~ 文章目录 uniapp Android如何…...
图论与网络优化2
CSDN 有字数限制,因此笔记分别发布,目前: 【笔记1】概念与计算、树及其算法【笔记2】容量网络模型 4 最大流及其算法 4.1 容量网络模型 4.1.1 容量网络 容量网络:如果一个加权有向网络 D D D 满足如下三个条件:①…...
ES Kibana windows 安装
ES & Kibana windows 安装 声明: 本文没有实际操作过,只记录。具体操作请参考 ES & Kibana 安装 该文章 JDK1.8,最低要求!ElasticSearch客户端,界面工具! Java开发,ElasticSearch的版…...
分布式事务seata的使用
分布式事务介绍 在微服务架构中,完成某一个业务功能可能需要横跨多个服务,操作多个数据库。这就涉及到到了分布式事务,需要操作的资源位于多个资源服务器上,而应用需要保证对于多个资源服务器的数据操作,要么全部成功&…...
使用宝塔面板安装mysql
1.第一步 在官网https://www.bt.cn/new/download.html下载页面直接在服务器控制面板复制这里的代码下载即可 2.第二步 下载好后按照服务器面版上有个公网地址,含有用户名和密码,保存好,然后通过公网地址打开一个网页,绑定自己注册…...
Flink 支持三种时间语义
在 Apache Flink 中,时间在流处理中是一个重要的概念,而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义,分别是: Processing Time(处理时间): 以机器的系统时间为基准,…...
【大话Presto 】- 核心概念
文章目录 前言Operator Model And Iterator Model系统组成Connector数据模型查询执行模型StatementStageTaskSplitDriverOperatorExchangePipeLine 总结 前言 Presto(PrestoDB)是一个FaceBook开源的分布式MPP SQL引擎,旨在处理大规模数据的查…...
阎良区公益创投之“小飞机大梦想” 航模DIY主题活动
创造是人类探索迈出的第一步,科学是开启奇妙世界的金钥匙。为进一步提升“未来星”对科技知识的兴趣,培养他们的科学创新精神,11月16日,阎良区社会组织公益创投——“未来星”助力乡村留守儿童成长计划项目在阎良区聚宝小学开展“…...
springBoot集成websocket实时消息推送
springBoot集成websocket实时消息推送 WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久性的连接,并支持双向数据传输,实现了实时、低延迟的通信。 📍常见的消息推送方法 WebSocket:通过使…...
web:[BUUCTF 2018]Online Tool
题目 打开页面显示如下,进行代码审计 上述代码主要功能是接收‘host’参数,后使用nmap扫描主机端口 首先检查是否存在HTTP_X_FORWARDED_FOR头,若存在,将值赋值给EMOTE_ADDR,是为了跟踪用户真实的IP地址 后用检查get‘host’是否…...
决策树的Boosting策略是什么
在决策树的Boosting策略中,最常见的算法是梯度提升决策树(Gradient Boosting Decision Trees,简称GBDT)。GBDT是一种集成学习方法,通过串行训练多个决策树,并根据前一个树的预测结果来调整下一个树的训练目…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
