Libreoffice-Makro-Grundlagen: Zum nächsten Absatztest auf Großbuchstaben springen

Libreoffice-Makro-Grundlagen: Zum nächsten Absatztest auf Großbuchstaben springen

Ich versuche, ein Makro zu schreiben, und muss zum nächsten Absatz springen, wo ich den ersten Buchstaben auf Großschreibung testen werde. Ich habe Stunden damit verbracht und nur ungenaue oder schwer verständliche Dokumentation für etwas gefunden, das meiner Meinung nach einfach sein sollte. Jede Anleitung wäre willkommen. Bisher habe ich:

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

Antwort1

Es gibt mehrere Probleme:

  • Geh rechts()Gibt einen Booleschen Wert zurück, um den Erfolg anzuzeigen, nicht die ausgewählte Zeichenfolge.
  • CapsTestist ein String und kein Boolescher Wert und kann daher nicht als Schleifenbedingung verwendet werden.
  • Woher wussten Sie, dass der Code nicht funktionierte? Vielleicht wollten Sie denCursor anzeigen, wodurch sich der sichtbare Cursor bewegen würde. (Ein Textcursor ist jedoch wahrscheinlich besser).
  • Der Code ignoriert immer den ersten Absatz, was möglicherweise beabsichtigt ist, aber seltsam erscheint.
  • Es gibt viele ungenutzte Variablen und die Groß- und Kleinschreibung ist inkonsistent.

Hier ist der funktionierende Code:

' 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

Wenn das Dokument also enthält:

a
b
C
d

Anschließend druckt das Makro Found result: "C".

Schauen Sie sich unbedingt anAndrew Pitonyaks Makrodokument. Es enthält viele hervorragende Beispiele.

verwandte Informationen