繁体   English   中英

替换 Word 文档中的文本

[英]Replace Text in Word Document

我正在使用 NetOffice 库来编辑 Word 文档。 在我的文档中,我有一个字段"{NAME}"我想用值"John Smith"替换它。 但是,执行以下代码不起作用。 Find.Execute返回 false,表示失败,并且document.Content.Text没有反映任何变化。

// Open the template
Application word = new Application();
Document document = word.Documents.Open(fileName, false, true);

// Set up initial behavior in word
word.Visible = false;

// Replace template with final values
foreach (LetterField field in fields)
{
    document.Content.Find.ClearFormatting();
    document.Content.Find.Text = "{" + field.Key + "}";
    document.Content.Find.Replacement.ClearFormatting();
    document.Content.Find.Replacement.Text = field.Value;
    document.Content.Find.Execute(null, null, null, null, null, null, null, null, null, null, WdReplace.wdReplaceAll);
}

我也尝试手动替换document.Content.Text ,但这会从页面中删除所有格式,这也是不可取的。 如何在 NetOffice 中替换文档中的文本?

我注意到设置document.Content.Find.Text似乎没有做任何事情,因为检查值仍然会产生"" ,即使在将其设置为其他内容之后也是如此。 这是预期的行为,还是我错过了什么?

该文档包含以下内容(复制粘贴):

Date: {DATE}
{NAME}
{ADDRESSLINE}
{ADDRESSCITY}, {ADDRESSSTATE} {ADDRESSCODE}

部分字段如下:

<"NAME", "John Smith">
<"DATE", "10/28/2021">

您在这里尝试做的事情看起来可以通过使用 Word 中内置的邮件合并功能来实现。 该功能旨在接收联系信息列表并替换占位符文本以生成针对列表中每个人的文档。

微软有一些关于如何实现这一点的很好的文档,我建议你查看https://support.microsoft.com/en-us/office/use-mail-merge-for-bulk-email-letters-labels-and-信封-f488ed5b-b849-4c11-9cff-932c49474705

我从您的示例开始,但是,尝试使用 Execute 方法的变体,它对我来说效果很好。

        const string TemplateFileName = @"D:\Dev\SO\MyWordDoc.docx";
        const string ResultFileName = @"D:\Dev\SO\MyWordDoc_new.docx";

        var wordApp = new Application();
        var doc = wordApp.Documents.Open(TemplateFileName, false, true);
        var status = doc.Content.Find.Execute(findText: "{NAME}", 
                                    matchCase: false,
                                    matchWholeWord: false,
                                    matchWildcards: false,
                                    matchSoundsLike: false,
                                    matchAllWordForms: false,
                                    forward: true, //this may be the one
                                    wrap: false,
                                    format: false,
                                    replaceWith: "My Name Value", 
                                    replace: WdReplace.wdReplaceAll
                                    );

        doc.SaveAs(ResultFileName);
        doc.Close();

我使用的语法来自: https : //docs.microsoft.com/en-us/office/vba/api/Word.Find.Execute

对于不同的参数。

可能是您可能需要使用forward参数Execute"True" ,即第 7 个参数。

结果文件: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM