1

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

使用 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 提供的支持要有限得多。

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

对此的任何建议都非常感谢。

4

2 回答 2

1

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

Dim s as String
s = ActiveDocument.ContentControls(#).XMLMapping.XPath
ActiveDocument.ContentControls(#).XMLMapping.Delete
ActiveDocument.ContentControls(#).XMLMapping.SetMapping s
于 2013-06-03T18:45:26.867 回答
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
于 2015-05-06T16:09:15.977 回答