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 中的快速测试让我相信这种方法很有前途。 DocumentBeforeClose
在DocumentBeforeSave
之前触发。
声明一个类级别的字段(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 中打开文件之前,我会读取所有字节并将其存储在一个类变量中,例如,使用
的 wordContentwordContent = System.IO.File.ReadAllBytes(path);
然后,每次我保存而不关闭应用程序(即单击 Word 中的保存按钮)时,我都会更新这个变量 wordContent。
因此,当我关闭应用程序并使用我的变量 isClosed == true 触发 AfterSave 事件时,此时我不知道用户是单击 Save 还是 Not Save 关闭了应用程序。因此,我读取了单词 File 的字节并与我的 wordContent 进行比较。当用户点击“保存”选项时,内容会有所不同,当用户点击“不保存”选项时,内容将相同。
所以,无论需要做什么,都将在这两个字节数组的比较中。
请记住,我正在使用我在上述问题中指出的帖子提供的 WordSaveHandler,如果用户通过单击保存按钮或关闭应用程序进行保存,则此类可以处理。
【讨论】:
以上是关于VSTO Word 后保存事件(带有取消保存的信息)的主要内容,如果未能解决你的问题,请参考以下文章
带有 FormRegion 的 VSTO Outlook 约会 - 删除收件人时保存异常