处理PowerPoint保存并另存为

时间:2016-07-14 15:37:38

标签: c# vsto powerpoint

基于我在网上找到的一些内容,我需要重建PowerPoint的SaveAs后台选项卡,以便我可以查看用户是否正在尝试执行SaveAs,而不是自PowerPoint事件以来的正常保存操作不提供像Excel和Word那样的信息。

How to Differentiate SaveAs call and Save call in PowerPoint events?

How to capture "Print Tab" click event at the backstage in Outlook 2010 ?

我已经阅读了以下文章。

Temporarily Repurpose Commands on the Office Fluent Ribbon

Introduction to the Office 2010 Backstage View for Developers

Customizing the Office 2010 Backstage View for Developers

我已成功删除了SaveAs选项卡(TabSave)并将其替换为我自己的按钮以触发SaveAs。不幸的是,通过这样做,我丢失了SaveAs选项卡上的其他功能,例如保存到One Drive和Office 365 SharePoint,这将使我们的客户烦恼。

因此,我试图再次构建Tab而没有运气,因为前面提到的stackoverflow文章提示并且我遇到了问题。我开始认为这不太可能。我是在正确的轨道上吗?我唯一的目标是拦截SaveAs操作,并能够告诉它是“SaveAs”而不是正常的“Save”。

有没有人成功完成此操作?它甚至可能吗?如果是这样,您是否愿意共享自定义UI XML?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。

在Office 2013中,他们添加了SaveAs选项卡。在该选项卡上是另存为按钮。不可能在选项卡上重新使用“另存为”按钮,并且看起来不可能像某些人所建议的那样替换SaveAs选项卡而不会丢失功能。

但无论是在BackStage还是功能区上,都可以可靠地重新使用FileSave。

<customUI
    xmlns="http://schemas.microsoft.com/office/2009/07/customui"
    onLoad="CustomUiOnLoad" >
  <commands>
    <command idMso="FileSave" onAction="FileSave_OnAction" />
  </commands>
</customUI>

调用FileSave_OnAction时,在文档包装器中设置一个标志,以指示保存的来源。

public void FileSave_OnAction(Office.IRibbonControl control, bool cancelDefault)
{
    using (var document = new ComWrapper<PowerPoint.Presentation>(Globals.ThisAddIn.Application.ActivePresentation))
    using (var docWrapper = DocWrapper<PowerPoint.Presentation>.GetWrapper(document))
    {
        try
        {
            cancelDefault = true;
            docWrapper.SaveAsUI = false;
            docWrapper.Save();
        }
        finally
        {
            docWrapper.SaveAsUI = true;
        }
    }
}