Как мне сделать отмену/повтор работы OOo при выполнении макроса?Как сделать макрос «атомным»
Это связанно с моим предыдущим вопросом: #853176
Как мне сделать отмену/повтор работы OOo при выполнении макроса?Как сделать макрос «атомным»
Это связанно с моим предыдущим вопросом: #853176
В Word это может быть достигнуто путем добавления закладки в документ в начале макроса, который затем удаляется, когда макрос выполняется. При вызове Отмена проверяется наличие такой специальной закладки, и операция отмены повторяется до тех пор, пока специальная закладка не будет удалена из документа.
Я предполагаю, что аналогичный подход будет работать и с OpenOffice.org.
Для получения более подробной информации см. Can I create an undo transaction in Word or Excel? (VSTO).
Вы можете поговорить с 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();
Спасибо, но это не работает :-( – cadrian
В чем проблема? Я не уверен, было ли это ясно из моего ответа, но пример кода в соответствующем сообщении был для Microsoft Word. Основная идея должна работать в OOo, а также я предположим, хотя вам может потребоваться создать пользовательскую кнопку отмены, и, возможно, вам придется использовать какую-то другую функцию, кроме закладки, например, текст в специальной позиции в документе. –
Проблема в том, что она не компилируется (неизвестный объект). Я попытался заменить приложение либо ThisDocument, либо StarDesktop, но он не был компилятором (неизвестная функция или свойство). – cadrian