如何检查Word 2007是否调用自动保存到Word插件中
本文关键字:Word 保存 插件 调用 2007 何检查 检查 是否 | 更新日期: 2023-09-27 17:59:32
我在DocumentBeforeSave事件处理程序中有一些功能
只有当用户手动调用Save(按Save按钮)时,它才能工作
但单词2007有自动保存功能,每次自动保存工作时DocumentBeforeSave都会抛出事件。如何检查是否通过"自动保存"或"用户手动调用保存"调用保存?
由于对象模型根本不支持它(根据此链接),因此看起来没有任何构建方法可以做到这一点,但您可以使用VBA覆盖默认的保存热键和按钮单击,并将这些调用发送到。NET程序集(根据此链接)。只需确保之后手动调用save,以确保文档确实保存了即可。
实际上有多种方法可以区分。
选项1(最佳)
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; }
这涵盖了通过后台按钮、快速访问工具栏按钮和保存快捷方式(即使它们重新定义了键盘快捷方式)进行的保存
有趣的是,还有一种方法可以在保存后进行判断,如本文所述(此处为更新版本)。