如何使用C#代码替换 Word 文档中的文本

在使用 Word 模板时,我们经常需要将特定占位符替换为实际内容,例如姓名、日期,甚至公司 Logo。手动逐一修改不仅耗时,还可能增加重复操作的工作量。通过编写代码,可以自动完成这一过程。本教程将介绍如何使用 C# 正则表达式替换 Word 文档中的文本,包括在整个文档中查找和替换内容、针对特定段落进行替换,以及将匹配的文本替换为图片。

开始之前:安装 Word 处理库

在处理 Word 文档时,可以借助相关的 .NET 文档处理库,实现文件读取、编辑和格式转换等操作。通过调用相应的 API,还可以使用少量 C# 代码完成 Word 文档中的正则表达式查找与替换。

可以通过 NuGet 安装所需的库,使用以下命令:

cs 复制代码
PM> Install-Package Spire.Doc

使用正则表达式替换整个 Word 文档中的文本

首先来看一种常见的场景:替换整个 Word 文档中的指定文本。可以使用正则表达式匹配 #name、#tel 等占位符,再将它们替换为实际内容,例如姓名或电话号码。

通过调用文档处理库提供的 Document.Replace() 方法,可以简化这一操作。下面将通过分步说明和示例代码,介绍如何使用 C# 正则表达式替换 Word 文档中的文本。

代码示例------使用 C# 将整个 Word 文档中的 #name 替换为 "May":

cs 复制代码
using Spire.Doc;
using System.Text.RegularExpressions;

namespace FindText
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Document 类的对象并加载 Word 文档
            Document doc = new Document();
            doc.LoadFromFile("/input/replace template.docx");

            // 设置正则表达式
            Regex regex = new Regex(@"#\w+\b");

            // 将所有匹配项替换为 "May"
            doc.Replace(regex, "May");

            // 保存文档
            doc.SaveToFile("/output/replacealloccurences.docx", FileFormat.Docx2013);
        }
    }
}

在 C# 中使用正则表达式替换指定段落中的文本

在整个 Word 文档中替换文本相对简单,但如果只需要修改某个特定段落,该如何实现呢?

当需要更精确地控制替换范围时,例如仅在指定段落中执行正则表达式替换,可以先获取目标段落的文本,再根据需要重新设置其内容。具体来说,可以使用正则表达式查找目标段落中的匹配文本,删除原有内容,并插入替换后的文本。

下面先来看一个实际的代码示例,随后再详细介绍具体步骤。

代码示例------使用正则表达式将第一个段落中的 #name 替换为 "Lily":

cs 复制代码
using Spire.Doc;
using Spire.Doc.Documents;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        // 创建 Document 对象并加载模板
        Document doc = new Document();
        doc.LoadFromFile("/input/replace template.docx");

        Regex regex = new Regex(@"#\w+\b");

        // 获取第一个段落
        Paragraph para = doc.Sections[0].Paragraphs[0];
        string originalText = para.Text;

        if (regex.IsMatch(originalText))
        {
            string newText = regex.Replace(originalText, "Lily");

            // 清除原有内容并添加替换后的文本
            para.ChildObjects.Clear();
            para.AppendText(newText);
        }

        // 保存修改后的文档
        doc.SaveToFile("/output/replacefirstpara.docx", FileFormat.Docx2013);
    }
}

使用 C# 将 Word 中匹配正则表达式的文本替换为图片

了解如何替换整个文档或指定段落中的文本后,接下来看看更进阶的用法------将文本替换为图片。这种方式常用于自动生成报告、公司宣传册等场景。例如,可以将 [logo] 这样的占位符替换为公司的实际 Logo。

结合 C# 正则表达式和图片插入 API,可以自动完成这一操作。下面先看一个实际代码示例,再详细介绍其实现原理。

代码示例------将 [avatar] 替换为图片:

cs 复制代码
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Text.RegularExpressions;

namespace RegexReplaceWithImage
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Document 对象并从磁盘加载 Word 文件
            Document document = new Document();
            document.LoadFromFile(@"\input\replace template.docx");

            // 定义用于匹配占位符的正则表达式
            Regex regex = new Regex(@"\[\w+\]", RegexOptions.IgnoreCase);

            // 查找文档中所有符合匹配规则的内容
            TextSelection[] selections = document.FindAllPattern(regex);

            // 遍历每个匹配到的占位符
            foreach (TextSelection selection in selections)
            {
                // 创建图片对象并从磁盘加载图片
                DocPicture pic = new DocPicture(document);
                pic.LoadImage(@"\avatar-1.png");

                // 将匹配到的文本作为单个文本范围获取
                TextRange textRange = selection.GetAsOneRange();

                // 获取该文本范围在所属段落中的索引
                int index = textRange.OwnerParagraph.ChildObjects.IndexOf(textRange);

                // 在匹配位置插入图片
                textRange.OwnerParagraph.ChildObjects.Insert(index, pic);

                // 删除原有的占位符文本
                textRange.OwnerParagraph.ChildObjects.Remove(textRange);
            }

            // 将修改后的文档保存到磁盘
            document.SaveToFile(@"\output\ReplaceTextWithImage.docx", FileFormat.Docx2016);
            document.Close();
        }
    }
}

使用 VB.NET 正则表达式替换文本

如果使用的是 VB.NET,也可以通过正则表达式在整个 Word 文档中查找和替换文本。实现思路与 C# 类似:先加载文档,再应用正则表达式匹配规则,最后更新文档内容。下面通过一个简单的示例,帮助你快速上手。

cs 复制代码
Imports Spire.Doc
Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        ' 创建 Document 对象
        Dim doc As New Document()
        doc.LoadFromFile("/input/replace template.docx")

        ' 设置正则表达式
        Dim regex As New Regex("#\w+\b")

        ' 将匹配的文本替换为 "Lena"
        doc.Replace(regex, "Lena")

        ' 保存文档
        doc.SaveToFile("/output/regexreplace.docx", FileFormat.Docx2013)
    End Sub
End Module

以上是使用正则表达式替换整个 Word 文档中指定文本的 VB.NET 代码示例。

如果还需要完成其他操作,例如替换特定段落中的文本或将文本替换为图片,也可以使用C#与VB.NET代码转换工具,将 C# 示例代码转换为 VB.NET。

总结

借助正则表达式,可以使用 C# 高效地替换 Word 文档中的文本,甚至将指定内容替换为图片。无论是处理模板、报告还是个性化文档,这种方式都能减少重复操作,提高处理效率。

相关推荐
Metaphor6921 天前
轻松使用 Python 将 RTF 转换为 Word(含批量转换与格式互转)
python·word·rtf
IHaveADiscovery1 天前
AI代劳Word表格线条:先搞懂术语再动手
人工智能·word
徐小夕@趣谈前端1 天前
老旧Word格式全支持!JitWord协同AI文档4.1,让Word文档无缝迁移到Web端
前端·人工智能·word
ms365copilot2 天前
Copilot 代理开始进入Word、Excel、PowerPoint,不再只是“问一句答一句”
word·excel·copilot
Logic1012 天前
Excel信息+照片文件夹,自动合成word格式化文档
word·excel·办公自动化·邮件合并·office技巧·自动插入图片·插入域
万化冥合3 天前
怎么批量把 Word 转 PDF?
python·pdf·c#·word
十碗饭吃不饱3 天前
Apache POI 踩坑:setFontFamily 二次设置字体不生效、样式残留问题深度解析
java·word·apache
brian00315 天前
word插件,像wps一样双击放大图片
word·wps·双击放大图片
DFT计算杂谈5 天前
LaTeX 格式公式复制至 Word 并快捷转换操作
word