XML / VBA - 更新Word Doc内容控制值

时间:2013-06-02 18:40:04

标签: xml vba ms-word word-contentcontrol

我正在探索XML w / MS Word作为生成具有动态内容的表单的解决方案,但我发现很难做出看似简单的任务。

使用MSDN中的示例

http://msdn.microsoft.com/en-us/library/office/gg605188%28v=office.14%29.aspx

说我打开我的xml文档,然后将<CompanyName>Adventure Works</CompanyName>更改为<CompanyName>Gadget Co.</CompanyName>。如何将.xml文档中更改的值反映到我的Word文档中?

我试过了:

1)保存,关闭和重新打开Word文档。

2)再次执行ActiveDocument.CustomXMLParts(4).Load命令。 (即使在关闭和打开之后,也会抛出已经加载的错误。)

3)使用ActiveDocument.ContentControls(#).XMLMapping.SetMapping程序重新映射控件。 (没有错误,但更新内容没有变化。)

似乎大多数XML和Office Suite文档都面向.Net开发。我真的不想为这个解决方案扩展到.Net,但似乎VBA提供了更多有限的支持。

最终,最终输出是一个邮件合并类型doc,其中有几个嵌套文档可以单独解析并保存为pdf。内容将是动态的,具有可变长度表和动态生成的复选框(具有相应的文本内容控件)。此时,我不确定Word和XML是否可行,并且正在考虑基于VBA的MS Publisher解决方案。

非常感谢任何有关此建议。

2 个答案:

答案 0 :(得分:1)

删除映射,然后重新创建它:

Dim s as String
s = ActiveDocument.ContentControls(#).XMLMapping.XPath
ActiveDocument.ContentControls(#).XMLMapping.Delete
ActiveDocument.ContentControls(#).XMLMapping.SetMapping s

答案 1 :(得分:1)

您可以使用新的CustomXmlPart迭代所有控件并重做映射。

Dim xmlPart As CustomXMLPart
Dim cc As ContentControl

Set xmlPart = ActiveDocument.CustomXMLParts.Add
xmlPart.Load (c:/temp/test.xml)

For Each cc In ActiveDocument.ContentControls
    cc.XMLMapping.SetMapping cc.XMLMapping.XPath, cc.XMLMapping.PrefixMappings, xmlPart
Next cc