Macro básica do Libreoffice: pule para o próximo parágrafo, teste para letras maiúsculas

Macro básica do Libreoffice: pule para o próximo parágrafo, teste para letras maiúsculas

Estou tentando escrever uma macro e preciso pular para o próximo parágrafo, onde testarei a primeira letra quanto à capitalização. Passei horas e só encontrei documentação imprecisa ou difícil de seguir para algo que acho que deveria ser simples. Qualquer direção seria apreciada. Até agora eu tenho:

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

Responder1

Existem vários problemas:

  • Vire a direita()retorna um booleano para indicar sucesso, não a string selecionada.
  • CapsTesté uma string, não um booleano, portanto não pode ser usado como condição de loop.
  • Como você sabia que o código não estava funcionando? Talvez você pretendesse usar ovisualizar cursor, o que faria com que o cursor visível se movesse. (No entanto, um cursor de texto é provavelmente melhor).
  • O código sempre ignora o primeiro parágrafo, o que pode ser intencional, mas parece estranho.
  • Existem muitas variáveis ​​não utilizadas e a capitalização é inconsistente.

Aqui está o código funcional:

' 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

Portanto, se o documento contiver:

a
b
C
d

Então a macro é impressa Found result: "C".

Não deixe de conferirDocumento macro de Andrew Pitonyak. Ele contém muitos exemplos excelentes.

informação relacionada