Как написать макрос, чтобы выделить выделенные слова?

Как написать макрос, чтобы выделить выделенные слова?

Как написать макрос для 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 неожиданно закрылся, как только я изменил знак ударения с "(Без)" на "Точка" в диалоговом окне "Шрифтовые эффекты" в 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

Я нашел веб-страницу: 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

Это то, что мне нужно. Наконец-то...

Связанный контент