JAVA根据Word模板生成word文件

embedded/2025/1/1 22:34:20/

本次要做一个小工具,读取excel数据,然后生成word文件。

直接上代码:

一、引用包

java">        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.15</version></dependency>

二、工具类 WordUtils

java">package com.example.maitou;import org.apache.poi.xwpf.usermodel.*;import java.util.Iterator;
import java.util.List;
import java.util.Map;public class WordUtils {/**** @Description :替换段落文本* @param document docx解析对象* @param textMap  需要替换的信息集合* @return void*/public static void changeText(XWPFDocument document, Map<String, Object> textMap) {// 获取段落集合Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();XWPFParagraph paragraph = null;while (iterator.hasNext()) {paragraph = iterator.next();// 判断此段落是否需要替换if (checkText(paragraph.getText())) {replaceValue(paragraph, textMap);}}}/**** @Description :替换表格内的文字* @param document* @param data* @return void*/public static void changeTableText(XWPFDocument document, Map<String, Object> data) {// 获取文件的表格Iterator<XWPFTable> tableList = document.getTablesIterator();XWPFTable table;List<XWPFTableRow> rows;List<XWPFTableCell> cells;// 循环所有需要进行替换的文本,进行替换while (tableList.hasNext()) {table = tableList.next();if (checkText(table.getText())) {rows = table.getRows();// 遍历表格,并替换模板for (XWPFTableRow row : rows) {cells = row.getTableCells();for (XWPFTableCell cell : cells) {// 判断单元格是否需要替换if (checkText(cell.getText())) {List<XWPFParagraph> paragraphs = cell.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {replaceValue(paragraph, data);}}}}}}}/**** @Description :检查文本中是否包含指定的字符(此处为“$”)* @param text* @return boolean*/public static boolean checkText(String text) {boolean check = false;if (text.contains("$")) {check = true;}return check;}/**** @Description :替换内容* @param paragraph* @param textMap* @return void*/public static void replaceValue(XWPFParagraph paragraph, Map<String, Object> textMap) {XWPFRun run, nextRun;String runsText;List<XWPFRun> runs = paragraph.getRuns();for (int i = 0; i < runs.size(); i++) {run = runs.get(i);runsText = run.getText(0);if (runsText.contains("${") || (runsText.contains("$") && runs.get(i + 1).getText(0).substring(0, 1).equals("{"))) {while (!runsText.contains("}")) {nextRun = runs.get(i + 1);runsText = runsText + nextRun.getText(0);//删除该节点下的数据paragraph.removeRun(i + 1);}Object value = changeValue(runsText, textMap);//判断key在Map中是否存在String replaceText = runsText.replace("${", "").replace("}", "");if (textMap.containsKey(replaceText)) {run.setText(value.toString(), 0);} else {//如果匹配不到,则不修改run.setText(runsText, 0);}}}}/**** @Description :匹配参数* @param value* @param textMap* @return java.lang.Object*/public static Object changeValue(String value, Map<String, Object> textMap) {Object valu = "";for (Map.Entry<String, Object> textSet : textMap.entrySet()) {// 匹配模板与替换值 格式${key}String key = textSet.getKey();if (value.contains(key)) {valu = textSet.getValue();}}return valu;}
}

main方法

java">public class WordTextTest {public static void main(String[] args) throws IOException {WordTextTest.fillWord();}public static void fillWord() throws IOException {//文件模板输入流InputStream inputStream = new ClassPathResource("document/demo2.docx").getInputStream();XWPFDocument document = new XWPFDocument(inputStream);Map<String, Object> map = new HashMap<>();map.put("title", "标题");map.put("name", "_小半q");map.put("sex", "男");if (map1.size() > 0) {// 替换掉表格之外的文本(仅限文本)WordUtils.changeText(document, map);// 替换表格内的文本对象WordUtils.changeTableText(document, map);}FileOutputStream fos = new FileOutputStream("C:\\Users\\MHGIS\\Desktop\\text1" + ".docx");document.write(fos);}
}

四、模板:


http://www.ppmy.cn/embedded/145355.html

相关文章

k8s的节点亲和性NodeAffinity

关键词: ① requiredDuringSchedulingIgnoredDuringExecution&#xff1a;表示强匹配&#xff0c;必须要满足 ② preferredDuringSchedulingIgnoredDuringExecution&#xff1a;表示弱匹配&#xff0c;尽可能满足&#xff0c;但不保证 示例&#xff1a; apiVersion: v1 kind:…

【密码学】AES算法

一、AES算法介绍&#xff1a; AES&#xff08;Advanced Encryption Standard&#xff09;算法是一种广泛使用的对称密钥加密&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年发布。 AES是一种分组密码&#xff0c;支持128位、192位和256位三种不同…

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…

python获取Windows事件日志并发送到企业微信邮箱

python获取Windows事件日志并发送到企业微信 开启企业微信的邮箱服务导入所需模块获取系统事件日志并压缩发送到企业微信邮箱打包成.exe小程序运行 开启企业微信的邮箱服务 登录企业微信邮箱 收件人和被抄送方的都需要开启服务。找到“设置”-“收发信设置” 开启服务 点击保存…

Vue宏观理解

文章目录 1 Vue是什么2 前端运行环境和工具3 环境搭建3.1 node.js安装3.2 Vite环境安装 4 Vue项目开发4.1 Vue项目开发开发方式4.2 Vue项目结构4.3 启动Vue项目4.4 Vue开发4.4 Vue工程运行流程 1 Vue是什么 Vue是一款Web前端JavaScript 框架&#xff1b; 官网&#xff1a;http…

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固&#xff08;Windows, Linux&#xff09;A-2 Nginx安全策略&#xff08;Linux&#xff09;A-3日志监控&#xff08;Windows&#xff09;A-4中间件…

使用Svelte构建轻量级应用详解

文章目录 前言一、为什么选择Svelte&#xff1f;二、快速上手Svelte三、理解Svelte的核心概念四、优化性能与用户体验五、案例研究&#xff1a;构建一个待办事项应用结语 前言 Svelte是一款新兴的前端框架&#xff0c;以其小巧的体积、高效的性能和直观的API赢得了开发者的青睐…