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 (mehrmaliges "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.
 
Ich hatte mir dazu aus einem Forum folgenden Source-Code rausgesucht:
 
-------------------------------------------
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
-------------------------------------------
 
Den Inhalt versteh ich ohne Probleme - komme aus der Java-Ecke. 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 bekomme ich eine Exception (Type: IllegalArgumentException; 
Message:." bei oText.compareRegionEnds(oFind,oEnd)).
 
Ursache hierfür dürfte die Start- und Endpunktermittlung bei Tabellen sein. Bei 
Ausführung von oText.createTextCursorByRange(oVC.End) erhalte ich auch den 
Laufzeitfehler "End of content node doesn´t have the proper start node".
 
Wie wäre das Makro anzupassen, dass es auch mit Tabellen funktioniert?
 
Lg

-- 
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme? 
http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Antwort per Email an