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

VSTO Word post save event (with information of Cancel Save)

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

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

我如何知道用户在尝试关闭 window 时是否单击了 "Save" 或 "Not Save" 按钮?我什么都试过了,但我不知道这个信息。

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

声明一个 class-level 字段(在下面的代码片段中 saveStatus)。

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

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

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

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

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

因此,无论需要做什么,都会比较这两个字节数组。

请记住,我正在使用我在上面的问题中指出的 post 提供的 WordSaveHandler,如果用户通过单击保存按钮或关闭来保存,这个 class 可以处理应用程序。