从幻灯片部件到自定义XML部件的关系不是显式关系而是隐式关系吗?

时间:2018-11-06 19:54:05

标签: vsto powerpoint openxml

如果我想将自定义XML部件幻灯片部件相关联,我知道的方法是在幻灯片中添加一个custData元素部分,并在id属性中引用自定义XML部分的关系ID

<p:custDataLst>
  <p:custData r:id="rId1" />
</p:custDataLst>

据我了解,这是一个显式关系,因为引用是通过关系id进行的。

但是,ECMA-376第1部分,第五版(当前为最新版本)说,幻灯片部分只允许与以下内容具有隐式关系自定义XML部件(第13.3.8节)。

那对我来说真的没有意义。在实践中,我看到了显式关系,而规范仅允许隐式关系。

如果我使用VSTO对象模型,这也是PowerPoint的方法。如果我创建一个全新的VSTO项目,并编辑启动方法,如下所示:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.AfterNewPresentation += pres =>
    {
        var firstSlide = pres.Slides[1];
        var customXmlPart = firstSlide.CustomerData.Add();
        customXmlPart.LoadXML("<test></test>");
    };
}

然后保存演示文稿并查看包结构,PowerPoint进行了完全相同的操作:向幻灯片中添加了custData元素,并使用关系ID引用了自定义XML部分。即显式关系。

我有信心规格正确,所以我缺少什么?

1 个答案:

答案 0 :(得分:1)

好的,事实证明Office故意不遵循该规范。幸运的是,Microsoft实际上记录了它们偏离标准的地方。可以在Open Specifications website on MSDN上找到此文档。在这里深入文档中,我找到了页面Word, Excel, and PowerPoint Standards Support,其中包含许多PDF文档,这些文档记录了如何在Word,PowerPoint和Excel中实现该标准。进一步深入[MS-OE376]: Office Implementation Information for ECMA-376 Standards Support,第2.1.23.e节指出:

  

该标准声明允许Presentation部分与Custom XML Data Storage部分具有隐式关系。

     

Office还允许在Presentation部分和自定义XML数据存储部分之间建立明确的关系。

PDF文档没有对幻灯片进行任何说明,但是现在我不再不确定我是否错误地解释了标准,或者PowerPoint是否不遵循标准。很明显,PowerPoint在很多情况下都没有遵循标准,因此我遇到的具体情况是幻灯片部分自定义XML数据存储部分之间的明确关系strong>可能只是PowerPoint不遵循标准的另一种情况。