VSTO Word 后保存事件(带有取消保存的信息)

Posted

技术标签:

【中文标题】VSTO Word 后保存事件(带有取消保存的信息)【英文标题】:VSTO Word post save event (with information of Cancel Save) 【发布时间】:2018-08-21 01:09:51 【问题描述】:

我知道已经有一个与此同名的帖子,但它为问题提供了部分解决方案。帖子是:VSTO Word post save event

我正在使用这个课程,它对我帮助很大。但是,当我在 Word 文件中进行更改并尝试关闭应用程序时,单击“不保存”选项会引发保存事件。

我如何知道用户在尝试关闭窗口时是否点击了“保存”或“不保存”按钮?我已经尝试了所有方法,但我不知道这些信息。

【问题讨论】:

【参考方案1】:

在 VBA 中的快速测试让我相信这种方法很有前途。 DocumentBeforeCloseDocumentBeforeSave 之前触发。

声明一个类级别的字段(saveStatus 在下面的代码 sn-p 中)。

DocumentBeforeClose 中,假设用户不会保存,将其设置为“False”。如果用户确实保存,请将 DocumentBeforeSave 中的值设置为 True。如果您需要在保存文档时对其执行某些操作,请将该代码也放入此事件中。

Private saveStatus as Boolean

Private Sub app_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean)
    saveStatus = False
    Debug.Print saveStatus
End Sub

Private Sub app_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    saveStatus = True
    Debug.Print saveStatus
End Sub

【讨论】:

嗨@Cindy,问题是当用户关闭应用程序并出现三个选项(保存、不保存和取消)时,即使单击“不保存”选项也会触发事件 app_DocumentBeforeSave ,就像单击“保存”选项时一样。 您是否使用了我在问题中指出的帖子提供的 WordSaveHandler?【参考方案2】:

对于那些面临同样问题的人,我找到了解决方案。在我在 Word 中打开文件之前,我会读取所有字节并将其存储在一个类变量中,例如,使用

的 wordContent
wordContent = System.IO.File.ReadAllBytes(path);

然后,每次我保存而不关闭应用程序(即单击 Word 中的保存按钮)时,我都会更新这个变量 wordContent。

因此,当我关闭应用程序并使用我的变量 isClosed == true 触发 AfterSave 事件时,此时我不知道用户是单击 Save 还是 Not Save 关闭了应用程序。因此,我读取了单词 File 的字节并与我的 wordContent 进行比较。当用户点击“保存”选项时,内容会有所不同,当用户点击“不保存”选项时,内容将相同。

所以,无论需要做什么,都将在这两个字节数组的比较中。

请记住,我正在使用我在上述问题中指出的帖子提供的 WordSaveHandler,如果用户通过单击保存按钮或关闭应用程序进行保存,则此类可以处理。

【讨论】:

以上是关于VSTO Word 后保存事件(带有取消保存的信息)的主要内容,如果未能解决你的问题,请参考以下文章

带有 FormRegion 的 VSTO Outlook 约会 - 删除收件人时保存异常

在 VSTO 插件 C# 中保存 Excel 工作簿

急求C#窗体操作VSTO如何向word模板中的特定文本框添加图文信息

VSTO保存自定义数据到工作簿

vsto 如何在range中插入变量

从 Windows 10 运行时,ClickOnce 不会取消注册/重新注册 VSTO 解决方案