3

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

然而,在过去,我们发现通常不使用 MailMerge 或 Word 中任何其他“高级”功能的典型管理员用户因不得不使用合并字段而被严重推迟。我们已经尝试为他们做这件事,制作文档,大量截图等。但这对他们来说都是“繁琐”的。

他们有几十个模板(都是不同类型的非常简单的字母),并且会想要合理地频繁地修改它们。

他们真正想要的是能够用一个简单的分隔符(如花括号)来标记字段,这有效地将自制的合并字段标记到我们的应用程序中(尽管 Word 忽略了它的重要性),如下所示:

亲爱的{客户姓氏}

然后我们可以用几行代码来获取字段,如下所示:

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

这感觉很粗糙,但非常简单(对于最终用户)。

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

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

4

2 回答 2

3

这是我用来查找和替换的代码的一部分。我先尝试了你的代码,但没有奏效。这是基于在录制宏时 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 二进制文件格式兼容。如果您可以使用 Office 2007 格式,则无需安装 Word。只需解压缩文档,找到 word\document.xml 文件,执行 a String.Replace("[OldValue]", "New value"),保存文件并将其压缩回一个包(docx 文件)。我在这里显示的代码很慢,因为我正在自动化 Word。在我的电脑上打开 Word、编辑 2 个包含 6 个字段的文档并关闭应用程序需要 4 秒。

于 2009-11-12T14:16:25.977 回答
1

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

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

于 2009-10-12T14:10:05.083 回答