Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index


Hallo Hans-Werner,

bei deiner Lösung wird aber der Text "in falscher Richtung" zusammengeführt; vom letzten Rahmen + vorletztem Rahmen + vorvorletztem Rahmen...

das lässt sich natürlich richtig rum programmieren ;-)

ich habe nur wenig Erfahrung mit Makroprogrammierung, ich schnippele die aus dem Internet zusammen

viele Grüsse
Martin


Am 22.10.2018 um 18:11 schrieb OoOHWHOoO:
Hallo Martin,

na klar, so kann man es auch machen. Indem bei Deinem Makro nichts gelöscht wird, kann die Schleife "vorwärts" laufen, weil keine "INDEX-Verschiebungen" passieren.

Wenn Du sie "rückwärts" laufen lässt, musst Du nicht extra ein neues Dokument anlegen.

Die beiden "Dim"s kannst Du Dir sparen, da die anderen Variablen auch nicht ge"Dim"t sind. Wenn Du allerdings "Option Explicit" nutzt, was man immer machen sollte, dann müssen alle Variablen ge"Dim"t sein.

Mit "& chr(10) & chr(10)" anstatt "& chr(13)" hättest Du dann immer noch eine Leerzeile dazwischen.

Sub DeleteFrameSaveText
' KOMMENTIERT: Dim oViewCursor as object
' KOMMENTIERT: Dim oText As Object
oDoc =ThisComponent
oTF = oDoc.getTextFrames
c = oTF.Count - 1
sText = " "
' KOMMENTIERT: For i = 0 to c
For i = c to 0 Step -1
thisF = oTF.getByIndex(i)
sText = sText & thisF.String & chr(10) & chr(10)
thisF.dispose()
Next
' KOMMENTIERT: oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
oViewCursor= thisComponent.GetCurrentController.ViewCursor
If IsEmpty(oViewCursor.Cell) Then
oText=thiscomponent.text
Else
oText=oViewCursor.Cell.Text
End If
oText.insertString(oViewCursor,sText,false)
End Sub

Gruß
Hans-Werner ;-))

------ Originalnachricht ------
Von: "Martin Jenniges" <martinjenniges@skynet.be>
An: users@de.libreoffice.org
Gesendet: 22.10.2018 17:21:26
Betreff: Re: [de-users] mangelhaftes Writer-Makro bezüglich Textrahmen verbessern

Hallo Hans-Werner,

auch ich habe mir gedacht, dass das Löschen den Fehler verursacht. ich habe mir das Makro folgendermassen aus dem Internet zusammengesnippelt


Sub DeleteFrameSaveText
Dim oViewCursor as object
dim oText As Object

oDoc =ThisComponent
oTF = oDoc.getTextFrames
c = oTF.Count - 1
sText = "  "
For i = 0 to c
thisF = oTF.getByIndex(i)
sText = sText & thisF.String & chr(13)
Next
oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
  oViewCursor= thiscomponent.GetCurrentController.ViewCursor

  If IsEmpty(oViewCursor.Cell) Then
    oText=thiscomponent.text
  Else
    oText=oViewCursor.Cell.Text
  End If
  oText.insertString(oViewCursor, sText,false)
End Sub

Jetzt liest das Makro nacheinander den Text der Rahmen in die Variabel sText, erzeugt ein neues Writer-Dokument und fügt den Inhalt von sText ein. Das genügt mir

mit freundlichem Gruss

Martin



Am 22.10.2018 um 15:57 schrieb OoOHWHOoO:
Hallo Martin,

die Fehlermeldung

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: .

besagt wohl, dass via "thisF = oTF.getByIndex(i)" ein Element indiziert wird, dass es bezüglich des Index nicht (mehr) gibt.

Ich vermute mal, dass durch das FRAME-Löschen ( thisF.dispose() ) der letzte Index ( bezüglich "oTF.getByIndex(i)" ) immer um 1 vermindert wird, die Schleife aber "zu weit" zählt.

Entschuldige bitte die etwas "holprige" Erläuterung, aber bezüglich "FRAMEs löschen" habe ich keinerlei Erfahrung.

Lässt man die Schleife rückwärts laufen ( For i = c to 0 Step -1 ) funktioniert das Makro. Ich hatte über [Einfügen]>[Rahmen]>[Rahmen interaktiv] 3 Rahmen in eine WRITER-Dokument eingefügt und jeweils mit Text gefüllt. Nach Makro-Ausführung waren die Rahmen weg und der Text direkt nacheinander in mehreren Zeilen aufgelistet:

Sub DeleteFrameSaveText
oDoc =ThisComponent
oTF = oDoc.getTextFrames
c = oTF.Count - 1
For i = c to 0 Step -1
thisF = oTF.getByIndex(i)
s = thisF.String
otc = oDoc.Text.createTextCursorByRange(thisF.Anchor)
otc.setString(s)
thisF.dispose()
Next
End Sub

Gruß
Hans-Werner ;-))



-- Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy




--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

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.