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+unsubscribe@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
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.