我最近开始深入研究OpenXML SDK,希望自动生成PowerPoint演示文稿。我发现整个过程都很痛苦,并且花了大半个周末和最后两天生成一个库来讨论原始的SDK调用。在生成过程中,一切似乎都运行正常,我可以在Open XML SDK Productivity Tool中验证代码是否正确。但是,在PowerPoint中打开文件会导致出现一个对话框,要求我在打开文件之前修复该文件。
所有这些代码都是从我在PowerPoint中创建的文件中反映出来的。在Productivity Tool中对这些包运行差异,我发现我的幻灯片布局(第一个除外)位于/ppt/slideLayouts/slideLayouts/
,而正确的演示文稿在/ppt/slideLayouts/
中有它们。我已经对生成代码进行了三次检查,并将SlideLayout添加到PresentationPart
,而不是SlideLayoutPart
。这特别奇怪,因为第一个布局位于正确的位置,后续的布局不是。
我已经阅读了Wouter van Vugt撰写的MSDN文档和Open XML电子书。我将我的代码与反映的代码进行了比较,看起来对我来说是正确的(尽管考虑到我对Open XML的新方式和PresentationML的复杂性,我可能会遗漏很多东西)。有没有人对这里可能发生的事情有任何见解?
答案 0 :(得分:2)
经过多次反复试验,我终于找到了问题所在。对于演示文稿中的每张幻灯片,我都按照以下步骤操作:
SlidePart
添加到PresentationPart
SlideLayoutPart
添加到SlidePart
SlideMasterPart
添加到SlideLayoutPart
ThemePart
添加到SlideMasterPart
OpenXML SDK必定存在错误,因为首先将SlideLayoutPart
添加到SlideMasterPart
会导致我在问题中列出的路径问题。这就是为什么第一个布局始终正常工作(它首先添加到幻灯片中)。我现在安排了代码,以便前四个项目符号存在于一个循环中,然后另一个循环遍历所有主程序以查找所有相关的布局,并且仅链接所使用的那些。
没有验证错误,PowerPoint第一次尝试就完全打开了文件!