Libreoffice Macro Basic: Zum nächsten Absatztest für Großbuchstaben springen

392
Paul B.

Ich versuche, ein Makro zu schreiben, und ich muss zum nächsten Absatz springen, wo ich den ersten Buchstaben auf Großschreibung testen werde. Ich habe Stunden verbracht und nur ungenaue oder schwer zu befolgende Dokumentation für etwas gefunden, das meiner Meinung nach einfach sein sollte. Jede Richtung wäre dankbar. 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 
1

1 Antwort auf die Frage

0
Jim K

Es gibt mehrere Probleme:

  • goRight () gibt einen Boolean- Wert zurück, um den Erfolg anzuzeigen, nicht die ausgewählte Zeichenfolge.
  • CapsTest ist eine Zeichenfolge und keine boolesche Zeichenfolge. Daher kann sie nicht als Schleifenbedingung verwendet werden.
  • Woher wussten Sie, dass der Code nicht funktionierte? Möglicherweise wollten Sie den Ansichtscursor verwenden, wodurch sich der sichtbare Cursor bewegen würde. (Ein Textcursor ist jedoch wahrscheinlich besser).
  • Der Code ignoriert immer den ersten Absatz, der beabsichtigt sein kann, aber seltsam erscheint.
  • Es gibt viele ungenutzte Variablen und die Großschreibung ist inkonsistent.

Hier ist der Arbeitscode:

' 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 Folgendes enthält:

a b C d 

Dann druckt das Makro Found result: "C".

Schauen Sie sich unbedingt das Makrodokument von Andrew Pitonyak an . Es enthält viele hervorragende Beispiele.

Vielen Dank für diese detaillierte Analyse. Ich werde das später untersuchen und zurückkommen. Paul B. vor 7 Jahren 0
Ich habe das geprüft und es funktioniert gut, und ich habe ziemlich viel daraus gelernt. Den ersten Absatz zu treffen ist nicht wichtig, da ich versuche, Absätze aus unnötigen Zeilenumbrüchen herauszupicken, und der erste Absatz ist offensichtlich ein Absatz. (Seltsam, ich kann hier keinen neuen Para starten, ohne den Befehl "Änderungen speichern" auszulösen.) IAC, ich kann dies verwenden und darauf aufbauen, was ich versuche. Ich habe festgestellt, dass die Dokumentation sehr schwer zu befolgen ist, einschließlich der von Ihnen verknüpften Ressource, die ich bereits hatte. Nochmals vielen Dank und sei gut. Paul B. vor 7 Jahren 0