显然,对于我们的应用程序生成基于模板的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

这个感觉粗糙,但完美的简单(为最终用户)。

有没有其他人走了这条路?什么错呢?我们会建议他们不要在文档的普通文本的其他地方使用“{”和“}”字符,但是这不是一个真正的显著限制。

速度?包裹在两行合并域?其他的问题?

有帮助吗?

解决方案

这是我的代码的一部分,我用于查找和替换。我第一次尝试你的代码,但没有奏效。这是基于该字时录制宏生成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。只要解压缩文件,查找单词\ document.xml中的文件,做一个String.Replace("[OldValue]", "New value"),保存文件和zip回一个包(DOCX文件)。 我这里显示的代码是非常缓慢的,因为我在Word进行自动化。打开Word,编辑2个文件用6个字段和关闭应用程序需要在我的电脑4秒。

其他提示

如果用户不希望使用大括号?我想你应该提供一种方式来逃避他们,例如/{/}{{}}等。

您需要确保您的更换逻辑的情况下,例如不敏感两种{CustomerSurname}和{} Customersurname应该允许代表相同的字段。甚至可以可选地允许像{顾客姓}单词之间的空格。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top