问题描述
|
我一直在为2007 Office System开发某些Office加载项。加载项需要知道文件格式,因为它们仅在格式是基于XML的较新压缩格式(docx,xlsx,xlsm,pptx等)之一时才执行其操作。
尽管每种Office产品在API(调用和行为)方面存在差异,但我还是设法为Word和Excel生成了有效的加载项。在这两种方法中,我都可以检测到保存事件并根据文件格式以及它是保存还是另存为操作进行更改。但是,我来过PowerPoint,我正在努力确定文件的格式或将其保存为哪种格式,以及它是常规保存还是另存为操作。
因此,我的问题是在PowerPoint VSTO加载项中:
有什么方法可以确定文件格式(不只是文件扩展名比较)?
是否可以确定保存是常规保存还是另存为?
更新资料
好的,我更改了搜索条件,发现这些问题似乎可以回答我的第一个问题(即,除了使用扩展名外别无其他方法),但是第二个问题仍然存在(也许直到我提高搜索效率为止)。
如何以编程方式获取PowerPoint文件格式
如何从PowerPoint Interop获取ActivePresentation文件格式
解决方法
我记得PPT没有办法。您必须拦截OPEN事件,缓存文档的文件名,然后在保存期间检查文件名。如果相同,则为保存;如果不同,则另存为。
如果文档是NEW,则不会有初始文件名,因此保存将另存为。
,
Application.PresentationBeforeSave
是要挂接的事件,它将告诉您这是\“另存为... \”,因为它发生在“另存为”对话框出现之前。 Application.PresentationSave
是常规保存(但可以通过编程将其用于\“另存为... \”)
因此,我要做的是在模块中放置一个类似于Dim isSaveAs As Boolean = False
的全局变量,然后在Application.PresentationBeforeSave
中将其设置为True
(除非其参数为Cancel = True
-在这种情况下,我会将其重新设置为False
)。然后在Application.PresentationSave
事件中我将检查If isSaveAs = True Then DoThis Else DoThat
。然后在“ 1”事件结束时将“ 9”设置回“ 6”。