2011-10-19 64 views
2

我正在寻找关于保存OpenXML文档,特别是PresentationDocument的一些建议。保存和自动保存PowerPoint OpenXML PresentationDocuments

在我的场景中,我直接从磁盘打开PowerPoint .pptx演示文稿,充当模板。然后,我添加(复制)来自各种其他PowerPoint演示文稿的幻灯片。对于每个单独的源演示文稿,我还添加了其MasterSlideParts和SlideLayoutParts。

问题1: 当演示文稿需要保存时,是否有一个命令可以保存所有对PresentationDocument的更改?还是我必须手动保存为新的或已被更改的每个项目,如:

 presentationDocument.PresentationPart.Presentation.Save(); 

     foreach (var slideMasterPart in presentationDocument.PresentationPart.SlideMasterParts) 
     { 
      slideMasterPart.SlideMaster.Save(); 
     } 

问题2:当打开一个PresentationDocument,有一个“自动保存”选项,这似乎默认为“真正”。任何人都可以解释自动保存什么吗?

我读过的东西表明,当PresentationDocument被处置时,这会将所有内容保存在PresentationDocument中。它是否正确?

如果是这样,我需要设置autosave = false,因为我需要控制保存自己,以便能够测试演示文稿构建逻辑。

在此先感谢您的任何答案。

史蒂夫

+0

你问“自动保存”是如何工作的?需要阅读该选项的MSDN描述才能知道该问题的答案。 –

+0

如果您有多个问题,我建议将它们分开。这两个问题都可以通过阅读文档来解决。 –

+0

感谢您的意见Ramhound。我花了很多时间搜索MSDN文档,但没有找到这两个相关问题的具体答案,所以我希望在这里有人能够帮助我。 – Appetere

回答

2

问题1:如果您正在使用流来打开你的文件,做这样你就不需要在显式调用其中的一个节省话费的修改。您只需在presentationDocument变量上调用Dispose()方法即可。处理文档状态

刷新并保存内容,关闭文档,并释放所有 资源。

这样可以节省您不必在演示文稿中调用保存或循环浏览每个单独的幻灯片。

问题2:autosave状态的文档如下:

获取指示部件是否应该被保存在 处置的标志。

这会让我相信,如果您希望在调用Dispose()方法时保存所有零件,您希望将该值设置为true。否则,您的更改可能无法保存。

+0

谢谢阿穆拉。我一直在使用PresentationDocument直接从磁盘打开文件,但首先将它们打开为流,然后按照您的建议将流传递给PresentationDocument,这是一个更好的主意。这也使得测试更容易,因为我应该能够将MemoryStream传递给测试文档,而不必转到磁盘。谢谢! – Appetere