[VSTO]清除Word文档撤消(undo)和重复(redo)

时间:2022-07-20 06:24:10

  最近在Word上做开发,使用的Open XML SDK 2.0VSTO。生成Word文件时使用了XML映射来实现内容控件(ContentControl)和自定义XML部件(CustomXMLPart)中的xml进行绑定,编辑文档时使用VSTO进行动态操作Word

  由于在编辑Word文档时,会动态添加内容控件(ContentControl),同时修改xml,进行xml映射。这就会遇到一个问题是:Word文档的撤消(undo)和重复(redo)操作,只影响内容控件(ContentControl)而不影响自定义XML部件(CustomXMLPart)中的xml,想到解决办法是禁用Word文档撤消(undo)和重复(redo)操作。在网上google之后,Word文档中不能禁用撤消(undo)和重复(redo)功能,也不允许修改撤消(undo)和重复(redo)的堆栈最大数值。但是允许清除撤消(undo)和重复(redo)的堆栈。

 

清除当前文档的撤消(undo)堆栈

Sub ClearActiveDocumentUndoStack()
ActiveDocument.UndoClear
End Sub

清除所有打开文档的撤消(undo)堆栈

Sub ClearAllDocumentsUndoStack()
     Dim oDocUndoStack  as  Object
     For  Each oDocUndoStack In Application.Documents
        oDocUndoStack.UndoClear
     Next oDocUndoStack
End Sub

  C#Document也存在对应的UndoClear方法,撤消(undo)堆栈确实清空了,按照文章中的说法重复(redo)也应该不可能了,但实际在Word2010还是可以用的。只好用个小技巧(trick),调用UndoClear后,随便select点什么就行了。重复(redo)操作也只是select什么,没有不良后果。


参考文档 :WD2000: How to Clear the Undo Stack