我正在探索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解决方案。
非常感谢任何有关此建议。
答案 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