Macros “如何制作宏”;原子的;

Macros “如何制作宏”;原子的;,macros,openoffice.org,atomic,Macros,Openoffice.org,Atomic,当执行宏时,如何使OOo的撤消/重做正常工作 这与我前面的问题有关:您可以与UndoManager交谈,在宏的最开始调用enterUndoContext(),然后在最后调用leaveUndoContext()。例如: Dim undo As Object undo = ThisComponent.UndoManager undo.enterUndoContext("MyAtomicTest") ... [YOUR COMPLEX OPERATIONS HERE] ... undo.leaveUn

当执行宏时,如何使OOo的撤消/重做正常工作


这与我前面的问题有关:

您可以与UndoManager交谈,在宏的最开始调用
enterUndoContext()
,然后在最后调用
leaveUndoContext()
。例如:

Dim undo As Object
undo = ThisComponent.UndoManager
undo.enterUndoContext("MyAtomicTest")
...
[YOUR COMPLEX OPERATIONS HERE]
...
undo.leaveUndoContext

这将创建一个原子撤销操作,用户将其视为“MyAtomicTest”。

对于我们这些喜欢用JavaScript编写OOo宏的人来说,这里有一个应该可以工作的最小片段(它已经过测试,但我将此代码与更大的上下文隔离开来):


谢谢,这对我来说非常有效。
importClass( Packages.com.sun.star.document.XUndoManager );
importClass( Packages.com.sun.star.document.XUndoManagerSupplier );
var doc           = XSCRIPTCONTEXT.getDocument();
var undo_manager  = UnoRuntime.queryInterface(XUndoManagerSupplier, doc).getUndoManager();
undo_manager.enterUndoContext( 'your descriptive title here' ); 
// get stuff done
undo_manager.leaveUndoContext();