Ms word 仅使用分隔字段名的基本邮件合并

Ms word 仅使用分隔字段名的基本邮件合并,ms-word,office-interop,word-field,fieldcodes,Ms Word,Office Interop,Word Field,Fieldcodes,显然,我们的应用程序基于模板生成Word文档的正确方法是鼓励管理员用户(负责模板的管理员)在模板文档中嵌入正确的合并字段或书签 然而,在过去,我们发现通常不使用MailMerge或Word中任何其他“高级”功能的典型管理员用户由于必须使用合并字段而被显著推迟。我们试着为他们做这件事,制作文档,大量的屏幕截图等等,但对他们来说这一切都是“烦琐”的 他们有几十个模板(都是不同种类的真正简单的字母),并希望合理频繁地修改它们 他们真正希望的是能够使用一个简单的分隔符(如大括号)来标记字段,它可以有效地

显然,我们的应用程序基于模板生成Word文档的正确方法是鼓励管理员用户(负责模板的管理员)在模板文档中嵌入正确的合并字段或书签

然而,在过去,我们发现通常不使用MailMerge或Word中任何其他“高级”功能的典型管理员用户由于必须使用合并字段而被显著推迟。我们试着为他们做这件事,制作文档,大量的屏幕截图等等,但对他们来说这一切都是“烦琐”的

他们有几十个模板(都是不同种类的真正简单的字母),并希望合理频繁地修改它们

他们真正希望的是能够使用一个简单的分隔符(如大括号)来标记字段,它可以有效地将自制的合并字段标记到我们的应用程序中(尽管Word不知道它的意义),如下所示:

亲爱的{CustomerSurname}

然后,我们只需选取带有几行代码的字段,如下所示:

w = New Word.Application
d = w.Documents.Open(...)
Dim mergedContent As String = d.Content.Text
mergedContent = mergedContent.Replace("{CustomerSurname}", Customer.Surname)
mergedContent = mergedContent.Replace("{CustomerPostcode}", Customer.Postcode)
d.Content.Text = mergedContent
这感觉很粗糙,但非常简单(对于最终用户)

还有其他人走这条路吗?有什么问题吗?我们建议他们不要在文档的正常文本中的其他地方使用“{”和“}”字符,但这并不是一个很大的限制


速度?将合并字段换行成两行?其他问题?

如果用户确实想使用大括号怎么办?我认为您应该提供一种方法来逃避它们,例如
/{/}
{{}


您需要确保替换逻辑不区分大小写,例如{CustomerSurname}和{CustomerSurname}都应允许表示同一字段。甚至可以选择在{Customer namite}之类的词之间留空格。

这是我用来查找和替换的代码的一部分。我先尝试了你的代码,但没用。这是基于Word在录制宏时生成的VBA代码

range = document.Range()

With range.Find
 .Text = "{" & name & "}"
 .Replacement.Text = NewValueHere
 .Forward = True
 .Wrap = Word.WdFindWrap.wdFindContinue
 .Format = False
 .MatchCase = True
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
End With
range.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)
我使用此代码是因为文档需要与Office二进制文件格式兼容。如果可以使用Office2007格式,则无需安装Word。只需解压缩文档,找到word\document.xml文件,执行一个
字符串。替换(“[OldValue],“New value”)
,保存文件并将其压缩回一个包(docx文件)。 我在这里显示的代码非常慢,因为我正在自动化Word。在我的电脑上打开Word、编辑包含6个字段的2个文档和关闭应用程序需要4秒钟