Базовый макрос Libreoffice: перейти к следующему пункту теста для верхнего регистра
Я пытаюсь написать макрос, и мне нужно перейти к следующему абзацу, где я проверю первую букву на заглавную. Я провел часы и нашел только неточную или трудную для следования документацию для чего-то, что я думаю, должно быть простым. Любое направление будет оценено. Пока что у меня есть:
SUB FIND_PARAGRAPHS
Dim vDescriptor
dim Doc as object
dim Replace as object
dim oCursor
dim Proceed as Boolean
dim CapTest as String
vDescriptor = ThisComponent.createSearchDescriptor()
doc = ThisComponent
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' test para begin; if capital test previous end
oCursor = Doc.Text.createTextCursor()
Do
oCursor.gotoNextParagraph(false) 'NW
CapTest = oCursor.goRight(1, true) 'NW
if CapTest = ucase(CapTest) Then goto TestPreviousEnd
Loop While CapTest
TestPreviousEnd:
END SUB
1 ответ
Решение
Есть несколько проблем:
- goRight () возвращает логическое значение для обозначения успеха, а не выбранную строку.
CapsTest
это строка, а не логическое значение, поэтому ее нельзя использовать в качестве условия цикла.- Как вы узнали, что код не работает? Возможно, вы намеревались использовать курсор вида, который заставил бы перемещаться видимый курсор. (Однако текстовый курсор, вероятно, лучше).
- Код всегда игнорирует первый абзац, который может быть намеренным, но странным.
- Есть много неиспользованных переменных, и заглавные буквы несовместимы.
Вот рабочий код:
' Find the first paragraph in the document that begins with a capital letter.
Sub Find_Capitalized_Paragraph
Dim oDoc As Object
Dim oCursor As Object
Dim Proceed As Boolean
Dim CapTest As String
oDoc = ThisComponent
oCursor = oDoc.Text.createTextCursor()
oCursor.gotoStart(False)
Do
oCursor.goRight(1, True)
CapTest = oCursor.getString()
If CapTest <> "" And CapTest = UCase(CapTest) Then Goto TestPreviousEnd
oCursor.gotoNextParagraph(False)
Loop While CapTest <> ""
MsgBox("No results.")
Exit Sub
TestPreviousEnd:
MsgBox("Found result: """ & CapTest & """")
End Sub
Так что, если документ содержит:
a
b
C
d
Затем макрос печатает Found result: "C"
,
Обязательно ознакомьтесь с макро документом Андрея Питоняка. Он содержит много отличных примеров.