
Как написать макрос для 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
Это то, что мне нужно. Наконец-то...