Macro básica de Libreoffice: prueba de salto al siguiente párrafo para mayúsculas

Macro básica de Libreoffice: prueba de salto al siguiente párrafo para mayúsculas

Estoy intentando escribir una macro y necesito pasar al siguiente párrafo, donde probaré la primera letra en busca de mayúsculas. He pasado horas y sólo he encontrado documentación inexacta o difícil de seguir para algo que creo que debería ser simple. Cualquier dirección podría ser apreciada. Hasta ahora tengo:

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

Respuesta1

Hay varios problemas:

  • ve a la derecha()devuelve un valor booleano para indicar el éxito, no la cadena seleccionada.
  • CapsTestes una cadena, no un valor booleano, por lo que no se puede utilizar como condición de bucle.
  • ¿Cómo supiste que el código no funcionaba? Tal vez usted tenía la intención de utilizar elver cursor, lo que haría que el cursor visible se moviera. (Sin embargo, un cursor de texto probablemente sea mejor).
  • El código siempre ignora el primer párrafo, lo que puede ser intencionado pero parece extraño.
  • Hay muchas variables no utilizadas y la capitalización es inconsistente.

Aquí está el código de trabajo:

' 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

Entonces, si el documento contiene:

a
b
C
d

Luego se imprime la macro Found result: "C".

Asegúrate de revisarEl documento macro de Andrew Pitonyak. Contiene muchos ejemplos excelentes.

información relacionada