C# 在Word文档模板中,按照占位符插入文字或图片
1,引入包:DocX
2,代码如下
public class CC{public static void Ma22in(){// 示例:加载现有模板并替换占位符string templatePath = "报告模板.docx"; // 模板文件路径string outputPath = "Output.docx"; // 输出文件路径// 创建键值对,用于替换占位符var replacements = new Dictionary<string, string>(){["{{name}}"] = "ExamineeModel.Name",["{{hospitalName}}"] = "yyyy",["{{age}}"] = "11",["{{sex}}"] = "sex",["{{date}}"] = $"{DateTime.Now:yyyy-MM-dd}",["{{datetime}}"] = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}",["{{department}}"] = "devartName",["{{checkDescription}}"] = "CheckDescription",["{{conclusionAndAnalysis}}"] = "ConclusionAnalysis",["{{doctorName}}"] = "DocterName",};// 创建图片集合,存储图片路径及对应的占位符var imagePaths = new Dictionary<string, List<string>>{{ "{{image}}", new List<string>(){@"123222.jpg",@"123123.jpg",@"123123.jpg",@"123123.jpg",} } // 填写图片路径};ReplacePlaceholdersInTemplate(templatePath, outputPath, replacements, imagePaths);}public static void ReplacePlaceholdersInTemplate(string templatePath, string outputPath,Dictionary<string, string> replacements, Dictionary<string, List<string>> imagePaths){using (DocX document = DocX.Load(templatePath)){// 替换文本占位符foreach (var replacement in replacements){foreach (Paragraph paragraph in document.Paragraphs){if (paragraph.Text.Contains(replacement.Key)){paragraph.ReplaceText(replacement.Key, replacement.Value);}}}#region 眉头// 替换页眉中的文本占位符if (document.Headers.Even != null){foreach (Paragraph paragraph in document.Headers.Even.Paragraphs){foreach (var replacement in replacements){if (paragraph.Text.Contains(replacement.Key)){paragraph.ReplaceText(replacement.Key, replacement.Value);}}}}if (document.Headers.First != null){foreach (Paragraph paragraph in document.Headers.First.Paragraphs){foreach (var replacement in replacements){if (paragraph.Text.Contains(replacement.Key)){paragraph.ReplaceText(replacement.Key, replacement.Value);}}}}if (document.Headers.Odd != null){foreach (Paragraph paragraph in document.Headers.Odd.Paragraphs){foreach (var replacement in replacements){if (paragraph.Text.Contains(replacement.Key)){paragraph.ReplaceText(replacement.Key, replacement.Value);}}}}#endregion// 替换图片占位符foreach (var imagePath in imagePaths){foreach (Paragraph paragraph in document.Paragraphs){if (paragraph.Text.Contains(imagePath.Key)){InsertImage(paragraph, document, imagePath.Value);paragraph.ReplaceText(imagePath.Key, "");}}}// 保存输出文档document.SaveAs(outputPath);}}public static void InsertImage(Paragraph paragraph, DocX document, List<string> imagePath2, float width = 150, float height = 200f){foreach (var imagePath in imagePath2){if (System.IO.File.Exists(imagePath)){// 添加图片到文档var image = document.AddImage(imagePath);var picture = image.CreatePicture();// 设置图片大小//picture.SetSize(width, height);picture.Width = width;picture.Height = height;// 在对应段落插入图片paragraph.InsertPicture(picture);}else{}}}}
3,模板例如:

相关文章:
C# 在Word文档模板中,按照占位符插入文字或图片
1,引入包:DocX 2,代码如下 public class CC{public static void Ma22in(){// 示例:加载现有模板并替换占位符string templatePath "报告模板.docx"; // 模板文件路径string outputPath "Output.docx"; // 输出文…...
在使用PCA算法进行数据压缩降维时,如何确定最佳维度是一个关键问题?
一、PCA算法的基本原理 PCA算法的核心思想是通过正交变换,将一组可能相关的变量转换成一组线性不相关的变量,称为主成分。这组主成分能够以最小的信息损失来尽可能多地保留原始数据集的变异性。具体来说,PCA算法包括以下几个步骤:…...
深度学习3
五、自动微分 1、基础概念 模块 autograd 负责自动计算张量操作的梯度,具有自动求导功能;autograd 创建一个动态计算图来跟踪张量的操作,每个张量是计算图中的一个节点,节点之间的操作构成图的边。 属性 requires_grad 决定…...
Qt5.14.2的安装与环境变量及一些依赖库的配置
目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...
PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题
目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...
CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标
注:本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接、图片异常受引用之前的原文所限。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…...
类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表 1.1作用: 通过特定的值,来初始化对象。 1.2定义: 初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间…...
uni-app运行 安卓模拟器 MuMu模拟器
最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器,如果系统…...
java 打印对象所有属性的值 循环
在Java中,如果你想要打印一个对象的所有属性值,可以使用反射(Reflection)来获取对象的所有字段,并循环遍历这些字段以打印它们的值。以下是一个示例代码,展示了如何实现这一点: 示例类 假设我…...
k8s认证、授权
在 Kubernetes 中,kubectl auth can-i 命令用于检查当前用户或指定的 ServiceAccount 是否有权限执行特定的操作: kubectl auth can-i create deployment --as system:serviceaccount:default:dev-sa这个命令的作用是检查名为 dev-sa 的 ServiceAccount…...
基于spring boot的纺织品企业财务管理系统论文
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升&…...
@RequestBody和前端的关系以及,如何在前后端之间传递数据?
RequestBody 注解在 Spring MVC 中用于将 HTTP 请求体中的数据绑定到控制器方法的参数上。为了更好地理解 RequestBody 和前端之间的关系,我们可以从以下几个方面进行探讨: 1. 请求体的格式 前端发送的请求体通常是一个 JSON 字符串,也可以…...
详解登录MySQL时出现SSL connection error: unknown error number错误
目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后,使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件,然后按下图所示添加配置 此时再…...
【大数据学习 | Spark-Core】Spark的改变分区的算子
当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时,是需要shuffle的。 但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系&…...
Spring Boot Web应用开发:测试
在Spring Boot中,测试是开发过程的一个重要部分,它确保你的应用按预期工作,并且可以帮助你在早期发现和修复问题。Spring Boot提供了多种便捷的测试工具,使得编写和运行测试案例变得简单。 Spring Boot测试简介 Spring Boot支持…...
服务器数据恢复—光纤存储FC硬盘数据恢复案例
服务器存储数据恢复环境: 某品牌光纤存储上共有16块FC硬盘。存储上的卷映射到Linux操作系统上。Linux操作系统上运行Oracle数据库。 服务器存储故障&检测: 存储上2块硬盘故障灯亮起,存储映射到linux操作系统上的卷挂载不上,业…...
Android Binder技术概览
Android中的Binder是一种基于远程过程调用(Remote Procedure Call, RPC)的轻量级通信机制,核心用于 Android 系统中的进程间通信(Inter-Process Communication, IPC)。Binder 是 Android 系统中不可或缺的一部分&#…...
09 —— Webpack搭建开发环境
搭建开发环境 —— 使用webpack-dev-server 启动Web服务,自动检测代码变化,有变化后会自动重新打包,热更新到网页(代码变化后,直接替换变化的代码,自动更新网页,不用手动刷新网页) …...
深度学习模型:卷积神经网络(CNN)
一、前言 CNN 的发展历程可以追溯到 20 世纪 80 年代和 90 年代。受生物视觉系统的启发,研究人员开始探索如何构建专门用于处理图像数据的神经网络。早期的一些研究奠定了基础,例如 Fukushima 提出的 Neocognitron 模型。 随着时间的推移,到…...
Flask 自定义路由转换器
步骤 创建自定义转换器类 继承 werkzeug.routing.BaseConverter。实现 to_python 和(可选)to_url 方法。 将转换器注册到 Flask 应用 在路由中使用转换器 示例 创建转换器 假设需要自定义一个转换器 FourDigitYearConverter,用于匹配四位年…...
华为光猫配置解密工具技术架构解析与实现机制
华为光猫配置解密工具技术架构解析与实现机制 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 在网络设备运维领域,华为光猫配置文件的安全加密机制为设备…...
DroidRun:用自然语言指令重塑Android自动化体验
1. 当Android遇上自然语言:DroidRun如何重新定义自动化 还记得第一次用语音助手控制手机时的惊艳吗?说句话就能定闹钟、发消息,感觉像在演科幻片。但很快你就会发现,这些功能就像快餐店的固定套餐——只能点菜单上有的,…...
手把手教你魔改YOLOv8:从CSPPC到SPPELAN的实战调优(新手友好版)
1. 为什么需要魔改YOLOv8? 目标检测是计算机视觉领域最基础也最实用的技术之一,而YOLOv8作为当前最流行的实时检测框架,凭借其出色的速度和精度平衡,已经成为工业界和学术界的首选。但在实际项目中,我们经常会遇到一些…...
Python 3.15 JIT为何在Docker中静默禁用?揭开musl libc与libffi-3.4.6 ABI不兼容的致命链
第一章:Python 3.15 JIT 的设计目标与 Docker 场景适配性Python 3.15 引入的实验性 JIT(Just-In-Time)编译器并非追求通用性能提升,而是聚焦于特定高价值场景——尤其是容器化微服务中反复执行的 CPU 密集型工作负载。其核心设计目…...
轻量级MCU命令行交互系统设计与优化
1. 轻量级MCU命令行交互系统设计指南1.1 系统概述在嵌入式系统开发过程中,调试和维护阶段往往需要与单片机进行参数交互和操作控制。传统解决方案如RT-Thread的finsh组件虽然功能强大,但对于资源受限的MCU(如ROM<64KB,RAM<8…...
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福 春节将至,为公司员工准备个性化春联是传递祝福的好方式。传统手工创作耗时耗力,而春联生成模型-中文-base结合多线程技术,能高效完成批量定制。本文将详细…...
RWKV7-1.5B-g1a参数详解教程:temperature/top_p/max_new_tokens调优指南
RWKV7-1.5B-g1a参数详解教程:temperature/top_p/max_new_tokens调优指南 1. 模型简介 rwkv7-1.5B-g1a 是基于 RWKV-7 架构的多语言文本生成模型,特别适合以下场景: 基础问答文案续写简短总结轻量中文对话 这个模型在单卡 24GB 显存的设备上…...
从零到一:基于泛微E9开源资源的企业级业务模块二次开发实战指南
1. 为什么选择泛微E9进行二次开发? 泛微E9作为国内领先的OA系统,在企业信息化建设中扮演着重要角色。我接触过不少企业客户,他们选择E9的主要原因很简单:开箱即用的功能已经能满足80%的日常办公需求,而剩下的20%特殊需…...
小型电商自动化:OpenClaw+nanobot处理订单邮件
小型电商自动化:OpenClawnanobot处理订单邮件 1. 为什么选择OpenClaw处理电商订单 作为一个经营小型电商的个体商户,我每天要处理几十封来自Gmail的订单邮件。这些邮件包含客户信息、商品清单和收货地址,需要手动录入到库存表格、生成物流单…...
C#频谱图振动传感器温度传感器数据采集绘制频谱图和时域图,并存储数据库存储时间200ms左右
C#频谱图振动传感器温度传感器数据采集绘制频谱图和时域图,并存储数据库存储时间200ms左右,可以进行历史频谱图和时域图回放,可以求的最大值并设置阈值报警可以导出报警最近在搞工业设备监控系统的时候,需要实时采集振动和温度数据…...
