Как я могу написать макрос для OpenOffice Writer, который получает слова / символы, которые я выделил мышью, с меткой выделения, например точкой над словами / символами?

Я пытался записать макрос, но не получилось.

Я надеюсь, что кто-то здесь может помочь мне


Я пытаюсь написать макрос для OpenOffice Writer и LibreOffice Writer. Этот макрос добавит панель инструментов в Writer, аналогично китайской панели инструментов пунктуации в китайской версии MS Word. Кнопки панели инструментов являются китайскими знаками препинания. Одной из кнопок будет знак подчеркивания, используемый на китайском упрощенном языке. Метка выделения - это точка под китайским символом, которая выделяется, когда направление текста горизонтальное, и точка справа от выделенного символа, когда направление текста вертикальное.

Я не знаю OpenOffice Basic или других языков, используемых для написания компьютерных программ, но я знаю, что рекордер макросов Writer может записывать некоторые коды, которые можно использовать для написания нужного мне макроса. И я продолжаю гуглить, чтобы найти больше информации и научиться писать макросы. Для большинства знаков препинания коды просты.

Например, чтобы вставить метку остановки, используйте следующие коды:

rem U+3002
sub cp01
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "。"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub

Но рекордер макросов LibreOffice 3.4 не смог записать работающий макрос для метки выделения. На самом деле Writer неожиданно закрылся, как только я изменил метку выделения с «(Без)» на "Dot" в диалоговом окне "Эффекты шрифта" в символе Writer. Я был вынужден загрузить и установить OpenOffice.org 3.3 и 3.4.

Макро-рекордер OpenOffice.org 3.3 также не может записывать, но один из 3.4 сделал это. Макрос это:

sub Test20120206_1
rem --------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -------------------------------
dispatcher.executeDispatch(document, ".uno:EmphasisMark", "", 0, Array())
end sub

Этот макрос не работает.

1 ответ1

1

Я нашел веб-страницу:http://user.services.openoffice.org/en/forum/viewtopic.php?f=45&t=21813.

Макрос от FJCC сделал меня очень счастливым, потому что он короткий и о том, как применить эффект к выбранным персонажам, это может быть то, что мне нужно.

Doc = ThisComponent
Selections = Doc.CurrentSelection
FirstSelection = Selections.getByIndex(0)
TextString = FirstSelection.String
UCaseStr = UCase(TextString)
FirstSelection.String = UCaseStr

Затем я скомбинировал этот код с макросами из MS Word, японского языка и Питоняка А. и нашел работоспособный:

sub EmphasisMark
Doc = ThisComponent
Selections = Doc.CurrentSelection
FirstSelection = Selections.getByIndex(0)
  If  FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.NONE Then
      FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.DOT_BELOW
  Else
      FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.NONE
  End If
end sub

Это то, что мне нужно. В заключение...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .