Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Word 2007调用自动保存检查到Word addin中?_C#_Ms Office_Autosave_Office Addins - Fatal编程技术网

C# 如何将Word 2007调用自动保存检查到Word addin中?

C# 如何将Word 2007调用自动保存检查到Word addin中?,c#,ms-office,autosave,office-addins,C#,Ms Office,Autosave,Office Addins,我在DocumentBeforeSave事件处理程序中有一些功能 只有当用户手动调用Save(按Save按钮)时,这种方法才有效。 但是word 2007具有autosave功能,每次autosave工作时都会抛出事件文档BeforeSave。如何检查是否通过Autosave或用户手动调用save调用了save?由于对象模型根本不支持它(per),因此似乎没有内置的方法来执行此操作,但您可以使用VBA覆盖默认的save热键并单击按钮,然后将这些调用发送到.NET程序集(per)。只需确保您在之后

我在DocumentBeforeSave事件处理程序中有一些功能
只有当用户手动调用Save(按Save按钮)时,这种方法才有效。

但是word 2007具有autosave功能,每次autosave工作时都会抛出事件文档BeforeSave。如何检查是否通过Autosave或用户手动调用save调用了save?

由于对象模型根本不支持它(per),因此似乎没有内置的方法来执行此操作,但您可以使用VBA覆盖默认的save热键并单击按钮,然后将这些调用发送到.NET程序集(per)。只需确保您在之后手动调用save,以确保文档确实保存。

实际上有多种方法可以区分不同之处

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>
    
  • 还要在保存之前实现BeforeDocument\u,并检查那里的标志。如果设置了该标志,则它是手动的,否则它是自动保存的(或者可能来自另一个加载项;不确定是否有效)

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


有趣的是,还有一种方法可以在保存后进行判断,如()所述。

Greg,谢谢。你的回答对我很有帮助
public void SaveIntercept(IRibbonControl control, ref bool CancelDefault)
{
    logger.Info("Intercepted Manual Save");
    ManualSave = true;
    CancelDefault = false;
}
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;
}