如何检查Word 2007调用自动保存到word addin?

时间:2011-06-20 16:33:43

标签: c# ms-office autosave office-addins

我在DocumentBeforeSave事件处理程序中有一些功能。
只有当用户手动调用Save(按Save按钮)时,才应该有效 但是单词2007具有自动保存功能,并且每次自动保存工作时事件DocumentBeforeSave都会抛出。如何检查通过自动保存调用保存还是用户手动调用保存?

2 个答案:

答案 0 :(得分:1)

看起来没有内置的方法,因为对象模型根本不支持它(每this link),但您可以使用VBA覆盖默认的保存热键和按钮单击,并且将这些调用发送到您的.NET程序集(每this link)。只需确保之后手动调用保存以确保文档实际保存。

答案 1 :(得分:0)

实际上有多种方法可以区分它们。

<强> Option 1 (best)

Application.WordBasic.IsAutosaveEvent

选项2(我在找到选项1之前所做的)

  • 从功能区中截取FileSave(和FileSaveAs)命令:

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
       <commands>
         <command idMso="FileSave" onAction="SaveIntercept" />
       </commands>
     </customUI>
    
  • 在SaveIntercept方法中设置一个标志,并将CancelDefault设置为false,以便继续保存。

    public void SaveIntercept(IRibbonControl control, ref bool CancelDefault)
    {
        logger.Info("Intercepted Manual Save");
        ManualSave = true;
        CancelDefault = false;
    }
    
  • 同时实现BeforeDocument_BeforeSave,并检查那里的标志。如果设置了标志,则为手动,否则为自动保存(或者可能来自另一个加载项;不确定是否有效)。

    bool quit = !customizations.ManualSave;
    if (quit)
    {
        logger.Info("Autosave. Allowing Word to handle this save.");
        e.Cancel = false;
        return;
    }
    else
    {
        logger.Info("Manual save. Proceeding.");
        customizations.ManualSave = false;
    }
    

这包括通过后台按钮,快速访问工具栏按钮和保存快捷方式保存(即使他们重新定义键盘快捷键)

有趣的是,有一种方法可以告诉保存,如hereupdated version here)所述。