Makro für Suchen & Ersetzen in LibreOffice Writer

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Blumenkübel
Beiträge: 4
Registriert: Mi, 15.06.2016 14:30

Makro für Suchen & Ersetzen in LibreOffice Writer

Beitrag von Blumenkübel »

Hallo :)
ich habe eine Frage bezüglich der Makroprogrammierung in LibreOffice Writer. Ich möchte gerne in einem zuvor vom User markierten Bereich nach verschiedenen Strings suchen und diese anschließend ersetzen (Suchen & Ersetzen).

Das Suchen & Ersetzen mithilfe eines Makros ist kein großes Ding - Probleme habe ich jedoch bei der Umsetzung, dass nur in einem bestimmten Bereich gesucht werden soll.

Im Calc funktioniert das relativ schmerzlos mit:

Code: Alles auswählen

Sub Suchen_Ersetzen
   aRange = ThisComponent.getCurrentSelection()
   sSuchen = aRange.createReplaceDescriptor
   sSuchen.setSearchString("\")
   sSuchen.setReplaceString("/")
   arange.replaceAll(sSuchen)
End Sub
Jedoch kann ich dies nicht im Writer ausführen, da XReplaceable von XText nicht impementiert wird.

Nächster Versuch war folgendes - aus dem Forum geklaut:

Code: Alles auswählen

Sub Replace2()
Dim oDoc,oText,oVC,oStart,oEnd,oFind,FandR
oDoc = ThisComponent : oText = oDoc.Text
oVC = oDoc.CurrentController.getViewCursor
    aFind = Array("1", "2","3" ,"4", "5" ,"6" ,"7", "8", "9", "0")
    aReplace = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
   aRayCount = 0
   While aRayCount <= uBound(aFind)
      oStart = oText.createTextCursorByRange(oVC.Start)
      If Not oVC.isCollapsed then oEnd = oText.createTextCursorByRange(oVC.End)
         FandR = oDoc.createReplaceDescriptor
         With FandR
            .SearchString = aFind(aRayCount)
            .ReplaceString = aReplace(aRayCount)
            .SearchWords = false
         End With
      If isEmpty(oEnd) then 'Do whole document.
           oDoc.replaceAll(FandR)
      Else 'Do selection.
           Do
               On Error Resume Next
               oFind = oDoc.FindNext(oStart.End,FandR)
               If isNull(oFind) then Exit Do
               If oText.compareRegionEnds(oFind,oEnd) < 0 then Exit Do
               oFind.setString(FandR.ReplaceString)
               oFind = oDoc.FindNext(oFind.End,FandR)
          Loop
      EndIf
   aRayCount = aRayCount + 1
    Wend      
End Sub
Der Code sieht schonmal deutlich aufgeblähter aus - den Inhalt versteh ich jedoch ohne Probleme. In einem neuen frischen Dokument, welches nur Text beinhaltet, funktioniert das wunderbar.

Nun aber zum Problem: ich erstelle ein neues Dokument und füge den Text "Das issst ein Text". Darunter erstelle ich eine Tabelle und füge in die Zelle ebenfalls den Text "Das issst ein Text" ein.

Markiere ich nun den ersten Text und lasse durch das Makro " issst" durch "ist" ersetzen, so wird auch der Text in der Tabelle geändert. Woran liegt dies und wie kann ich dies umgehen?

Lg
Blumenkübel
Beiträge: 4
Registriert: Mi, 15.06.2016 14:30

Re: Makro für Suchen & Ersetzen in LibreOffice Writer

Beitrag von Blumenkübel »

Keine Lösung ?
Antworten