VSTO Word发布保存事件(包含取消保存信息)

时间:2018-03-12 21:51:10

标签: c# multithreading events vsto

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

我正在使用这门课,这对我帮助很大。但是,当我在Word文件中进行更改并尝试关闭应用程序时,单击选项" Not Save"提出了保存事件。

如何知道用户是否已点击"保存"或者"不保存"试图关闭窗户时是否有点?我已经尝试了一切,但我无法了解这些信息。

2 个答案:

答案 0 :(得分:0)

VBA的快速测试让我相信这种方法很有希望。在DocumentBeforeClose之前触发DocumentBeforeSave

在下面的代码段中声明一个类级字段(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

答案 1 :(得分:0)

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

的wordContent
AddValueEventListener(..)

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

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

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

记住我正在使用我在上面的问题中指出的帖子提供的WordSaveHandler,这个类可以通过单击Save Buttom或关闭应用程序来处理用户保存。