2014-02-26 94 views
0

我最近开始深入研究OpenXML SDK,希望能够自动生成PowerPoint演示文稿。我发现整个过程都很痛苦,并且花了整个周末的更多时间,最后两天生成了一个库来保存原始的SDK调用。在生成过程中,一切似乎都正常,我可以在Open XML SDK生产力工具中验证代码是否正确。但是,在PowerPoint中打开文件会导致出现一个对话框,要求我在打开文件之前修复该文件。使用OpenXML SDK在C#中生成PowerPoint文件;验证但打开时出错

所有这些代码都是从我在PowerPoint中创建的文件中反映出来的。针对Productivity Tool中的这些包运行差异,我发现我的幻灯片布局(除第一个之外)位于/ppt/slideLayouts/slideLayouts/中,而正确的演示文稿包含在/ppt/slideLayouts/中。我三重检查了我的生成代码,并将SlideLayout添加到PresentationPart,而不是SlideLayoutPart。这很奇怪,因为第一个布局位于正确的位置,而后面的布局不在。

我已阅读Wouter van Vugt的MSDN文档和Open XML电子书。我已经将我的代码与反射代码进行了比较,这对我来说似乎是正确的(尽管考虑到Open XML的新功能和PresentationML的复杂性,我可能会错过很多事情)。有没有人对这里可能发生的事情有所了解?

回答

2

经过多次试验和错误,我终于找到了问题。对于演示文稿中的每张幻灯片,我按照这些步骤:

  • 添加SlidePartPresentationPart
  • 添加SlideLayoutPartSlidePart
  • 添加SlideMasterPartSlideLayoutPart
  • 添加ThemePartSlideMasterPart
  • 如果是这样的第一次使用幻灯片母版时,向布局添加循环引用

OpenXML SDK必须存在一个bug,因为将SlideLayoutPart添加到SlideMasterPart首先会导致我在我的问题中列出的路径问题。这就是为什么第一个布局总是正常工作的原因(它首先被添加到幻灯片中)。我现在安排了代码,以便前四个项目符号存在于一个循环中,然后另一个循环遍历所有主要代码以查找所有关联的布局,并且只链接所使用的代码。

没有验证错误,PowerPoint会在第一次尝试时完美地打开文件!

+0

嗨,我不明白你是什么意思加入幻灯片演示文稿部分。你可以重新写代码示例吗? – Sak

相关问题