最近在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

相关文章:

  • 2022-12-23
  • 2021-08-20
  • 2022-03-10
  • 2021-09-22
  • 2021-08-06
  • 2022-12-23
  • 2021-09-16
猜你喜欢
  • 2021-07-24
  • 2022-02-12
  • 2021-08-07
  • 2021-12-22
  • 2022-01-03
  • 2021-07-16
相关资源
相似解决方案