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

使用Poi-tl对word模板生成动态报告

一、pom依赖问题:

<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.2</version>
</dependency>

使用 poi-tl 的 1.12.2版本,如果使用了poi依赖,则必须使用 poi的5.2.2版本(没有用到可以不引用)

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>

注意:如果还需要使用easyPoi 4.4.0 那这样是不行的,因为poi的5.2.2版本不兼容easyPoi ,只能将poi的版本降低到4.1.1,这样 poi-tl 就不能使用了,这里只能三者取其二。

二、具体实现:

1. word模板文件结构,根据实际情况修改:

这里我们使用了基本字符、表格,还有集合里面嵌套集合。 

2. 相关代码:

基本entity:

package com.fan.poi.entity;import lombok.Data;import java.util.List;@Data
public class PersonDuty {private String startMonth;private String startDay;private String endMonth;private String endDay;/*** 到岗总人数*/private String dgSum;/*** 未到岗总人数*/private String ndgNum;/*** 到岗率*/private String dgRate;private String dutyName;private List<ReportTable> tableList1;private List<ReportDataTable> monList;}
package com.fan.poi.entity;import lombok.Data;@Data
public class ReportTable {/*** 所属部门*/private String supUnitName;/*** 到岗天数*/private String supCount;/*** 未到岗数量*/private String noSupCount;/*** 部门到岗率*/private String syoSum;/***  人员到岗总时长*/private String allSupDuration;
}
package com.fan.poi.entity;import lombok.Data;import java.util.List;@Data
public class ReportDataTable {private String name;/*** 所属部门*/private String supUnitName;/*** 共到岗天数*/private String supCount;/*** 未到岗天数*/private String noSupCount;/*** 到岗率*/private String syoSum;/*** 累计到岗时长*/private String allSupDuration;/*** 详细情况*/private List<TaskDailyDataList> taskDailyDataList;}
package com.fan.poi.entity;import lombok.Data;@Data
public class TaskDailyDataList {private String month;private String day;/*** 考勤人员*/private String Name;/*** 累计在岗时长*/private String totalOnSiteMinutes;
}

实现代码: 

package com.fan.poi;import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.fan.poi.entity.PersonDuty;
import com.fan.poi.entity.ReportDataTable;
import com.fan.poi.entity.ReportTable;
import com.fan.poi.entity.TaskDailyDataList;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 动态生成word模板* @author fan*/
public class FileUtil {public static void main(String[] args) {exportWord("D:\\生成前的模板文件.docx", "D:\\");}public static void exportWord( String sorFilePath, String TarFilePath) {try {PersonDuty personDuty = new PersonDuty();// 模拟数据personDuty.setDutyName("张三");personDuty.setStartDay("2023-05-01");personDuty.setEndDay("2023-05-07");personDuty.setStartMonth("2023-05");personDuty.setEndMonth("2023-05");personDuty.setDgSum("5");personDuty.setDgRate("90");personDuty.setNdgNum("1");List<ReportTable> tableList1 = new ArrayList<>();ReportTable reportTable = new ReportTable();reportTable.setSyoSum("100");reportTable.setSupUnitName("测试部门");reportTable.setSupCount("2");reportTable.setNoSupCount("0");reportTable.setAllSupDuration("10");tableList1.add(reportTable);ReportTable reportTable1 = new ReportTable();reportTable1.setSyoSum("33%");reportTable1.setSupUnitName("开发部门");reportTable1.setSupCount("2");reportTable1.setNoSupCount("1");reportTable1.setAllSupDuration("10");tableList1.add(reportTable1);personDuty.setTableList1(tableList1);List<ReportDataTable> monList = new ArrayList<>();ReportDataTable reportDataTable = new ReportDataTable();reportDataTable.setName("张三");reportDataTable.setSupUnitName("测试部");reportDataTable.setSupCount("5");reportDataTable.setNoSupCount("0");reportDataTable.setSyoSum("100%");reportDataTable.setAllSupDuration("40");List<TaskDailyDataList> taskDailyDataList = new ArrayList<>();TaskDailyDataList taskDailyDataList1 = new TaskDailyDataList();taskDailyDataList1.setName("张三");taskDailyDataList1.setDay("2023-05-01");taskDailyDataList1.setMonth("2023-05");taskDailyDataList1.setTotalOnSiteMinutes("40");TaskDailyDataList taskDailyDataList2 = new TaskDailyDataList();taskDailyDataList2.setName("李四");taskDailyDataList2.setDay("2021-05-01");taskDailyDataList2.setMonth("2021-05");taskDailyDataList2.setTotalOnSiteMinutes("40");taskDailyDataList.add(taskDailyDataList1);taskDailyDataList.add(taskDailyDataList2);reportDataTable.setTaskDailyDataList(taskDailyDataList);monList.add(reportDataTable);personDuty.setMonList(monList);String targetFileName = "生成后的文件.docx";//modelFileName是模板路径/模板文件名String modelFileName = "D:";File file = new File(modelFileName);if (!file.exists()) {System.out.println("模板文件不存在:" + modelFileName);throw new RuntimeException("模板文件不存在");}//生成报告,对于集合,只要personDuty包含对应的集合即可,有嵌套也会自动替换Configure config = Configure.builder().bind("tableList1", new LoopRowTableRenderPolicy()).bind("monList", new LoopRowTableRenderPolicy()).build();XWPFTemplate template = XWPFTemplate.compile(sorFilePath, config).render(personDuty);//判断目标路径是否存在File directory = new File(TarFilePath);if (!directory.exists()) {directory.mkdirs();}//定义输出路径String targetPath = TarFilePath + targetFileName;template.writeToFile(targetPath);} catch (IOException e) {throw new RuntimeException(e);}}
}

生成后的文件:

  这里主要是简单的把几种场景实现一下,项目中遇到的问题,还需我们自定义拼接逻辑。

相关文章:

使用Poi-tl对word模板生成动态报告

一、pom依赖问题&#xff1a; <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.2</version> </dependency> 使用 poi-tl 的 1.12.2版本&#xff0c;如果使用了poi依赖&#x…...

day45-dynamic programming-part12-8.16

tasks for today: 1. 115.不同的子序列 2. 583.两个字符串选的删除操作 3. 72.编辑距离 4. 总结编辑两个序列关系的问题 ------------------------------------------------------------------- 1. 115.不同的子序列 In this practice, it is necessary to compare with t…...

C# String的方法

目录 #region 知识点九 字符串切割 #region 知识点一 字符串指定位置获取 #region 知识点二 字符串拼接 #region 知识点三 正向查找字符位置 #region 知识点四 反向查找指定字符串位置 #region 知识点五 移除指定位置后的字符 #region 知识点六 替换指定字符串 #region 知识点七…...

Oracle RAC vs Clusterware vs ASM

Oracle RAC vs Clusterware vs ASM Oracle RACCache FusionRAC后台进程自动负载管理DBA管理工具Oracle ClusterwareCRS组件HAS组件管理工具Oracle ASMASM实例ASM磁盘组镜像和故障组ASM磁盘ASM文件Oracle RAC RAC即Real Application Clusters,是一种Oracle高可用部署架构。Orac…...

“华为杯”第十五届中国研究生数学建模竞赛-F题:机场新增卫星厅对中转旅客影响的研究

目录 摘 要: 一、 问题重述 1.1 研究背景 1.2 已知信息 1.3 需要解决的问题 二、 模型假设 三、 符号说明 四、 问题一模型的建立与求解 4.1 问题描述与分析 4.2 模型的求解 4.3 求解结果与分析 五、 问题二模型的建立与求解 5.1 问题描述与分析 5.2 模型的求解 5.3 求解结果与…...

正点原子linux开发板 qt程序交叉编译执行

1.开发板光盘 A-基础资料->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机 用文件传输系统或者共享文件夹传输到linux虚拟机 用ls -l查看权限&#xff0c;如果是白色的使…...

聚星文社和虹猫哪个好

聚星文社和虹猫是两个不同的公司&#xff0c;各有各的特点。下面是它们各自的优点&#xff1a; 聚星文社&#xff1a;Docshttps://docs.qq.com/doc/DRU1vcUZlanBKR2xy 聚星文社是一家传媒公司&#xff0c;专注于出版漫画、动画、小说等内容&#xff0c;拥有丰富的IP资源和创作…...

三十八、【人工智能】【机器学习】【监督贝叶斯网络(Bayesian Networks)学习】- 算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...

[书生大模型实战营][L0][Task1] Linux 远程连接 InternStudio

[书生大模型实战营][Task1] Linux 远程连接 InterStudio 1. 申请 InterStudio 账号 https://studio.intern-ai.org.cn/console/dashboard 2. ssh 生成公匙与密匙 使用 ssh-gen 生成公匙与密匙 # 1. ssh-gen ssh-gen# 2. 查看生成的文件 ls ~/.ssh# 3. 打开生成的公匙&#…...

【vue教程】六. Vue 的状态管理

目录 往期列表本章涵盖知识点回顾Vuex 的基本概念什么是 Vuex&#xff1f;为什么需要 Vuex&#xff1f; Vuex 的核心概念stategettersmutationsactionsmodules Vuex 的安装和基本使用安装 Vuex创建 store在 Vue 应用中使用 store在组件中访问和修改状态 Vuex 的模块化模块化的好…...

无人机电子调速器详解!!!

电子调速器是无人机动力系统中的关键组件&#xff0c;主要负责将电池提供的直流电转换为交流电&#xff0c;并精确控制电机的转速&#xff0c;从而实现对无人机飞行状态的精确控制。以下是对无人机电子调速器的详细解析&#xff1a; 一、基本功能与原理 功能&#xff1a; 直…...

Clichouse数据导出导入(数据迁移)

背景&#xff1a;因为clickhouse数据持续增加&#xff0c;导致服务器磁盘不够使用&#xff0c;云服务器的系统盘不能扩容&#xff0c;所以只能进行迁移 连接clickhouse查看要迁移那些数据库 rootjcdata:~/buckup/clickhouse# clickhouse-client -udefault --password 123456…...

Java基础——IService.class 中查询数据方法list() 源码剖析及使用

下面详细介绍Mybatis-plus 的默认服务IService.class 中的查询数据的方法及使用。 方法定义及其详细介绍 default List<T> list(Wrapper<T> queryWrapper) default List<T> list(Wrapper<T> queryWrapper) {return this.getBaseMapper().selectList(q…...

MySQL库表的基本操作

目录 1.库的操作1.1 创建数据库1.2字符集和校验规则①查看系统默认字符集以及校验规则②查看数据库支持的字符集③查看数据库支持的字符集校验规则④校验规则对数据库的影响 1.3操纵数据库①查看数据库②显示创建的数据库的语句③修改数据库④数据库删除⑤备份和恢复⑥还原注意…...

基于ResNeSt50神经网络模型的蘑菇分类设计与实现,使用注意力机制,分别对应8种蘑菇进行训练预测

该项目旨在利用卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;实现蘑菇的自动识别。通过对蘑菇图片进行分类&#xff0c;可以有效地将不同类型的蘑菇进行辨别&#xff0c;对于蘑菇的研究、食用安全及自然保护等方面具有重要意义。本文将详细描述项目…...

[论文翻译]使用 BERT 检测安卓恶意软件

Android Malware Detection Using BERT Souani B, Khanfir A, Bartel A, et al. Android malware detection using bert[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2022: 575-591. 摘要 在本文…...

LabVIEW滚动轴承故障诊断系统

滚动轴承是多种机械设备中的关键组件&#xff0c;其性能直接影响整个机械系统的稳定性和安全性。由于轴承在运行过程中可能会遇到多种复杂的工作条件和环境因素影响&#xff0c;这就需要一种高效、准确的故障诊断方法来确保机械系统的可靠运行。利用LabVIEW开发的故障诊断系统&…...

【论文分享】通过社交媒体图片和计算机视觉分析城市绿道的使用情况

城市街道为路面跑步提供了环境。本次给大家带来一篇SCI论文的全文翻译&#xff01;该论文提出了一种非参数方法&#xff0c;使用机器学习模型来预测路面跑步强度。该论文提供了关于路面跑步的实证证据&#xff0c;并突出了规划者、景观设计师和城市管理者在设计适于跑步的城市街…...

MySQL 在 Windows 和 Ubuntu 上的安装与远程连接配置简介

MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff0c;它提供了多用户、多线程的数据库服务。本文将介绍如何在 Windows 和 Ubuntu 操作系统上安装 MySQL&#xff0c;并配置远程连接。 Windows 上的 MySQL 安装 1. 下载 MySQL Installer 访问 MySQL 官方网站下载 Win…...

博达网站群管理平台 v6.0使用相关问题解决

1 介绍 最近受人所托&#xff0c;需要用博达网站群管理平台创建一个网站。该平台的内部版本为9.8.2。作为一个能直接从代码创建网站系统的人&#xff0c;初次使用本平台&#xff0c;刚开始感觉摸不着头脑。因为该平台存在的目的&#xff0c;就是让不懂代码的人能快速创建网站&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...