🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Feldbefehl für erstes Wort auf der Seite
-
- Beiträge: 22
- Registriert: Di 24. Jun 2014, 21:14
Feldbefehl für erstes Wort auf der Seite
Hallo,
ich arbeite an einem Dokument im Wörterbuchstil und suche nun eine Möglichkeit, jeweils bestimmte Wörter der Seite mittels Feldbefehl in der Kopfzeile anzeigen zu lassen, wie man es aus nahezu allen Wörterbüchern kennt: Normalerweise findet man da in der Kopfzeile links das erste Wort des ersten Eintrags und rechts das erste Wort des letzten Eintrags. Um das ganze nicht unnötig kompliziert zu gestalten, bin ich gern bereit, keinen Eintrag über zwei Seiten laufen zu lassen, somit entspricht zumindest das erste Wort der ersten Zeile dem, was in der Kopfzeile links stehen soll.
Hat jemand eine Idee, wie ich einzelne Wörter automatisiert in die Kopfzeile bekomme?
Edit 01: Am besten geeignet wäre ein Feldbefehl (oder Makro?), der das erste Wort des ersten bzw. letzten Absatzes der Seite anzeigt.
Edit 02: Unter http://www.dannenhoefer.de/faqstarbasic ... eifen.html ist ein Hinweis zu finden, wie ich rangehen könnte (fett gedruckt unsichere/fehlende Stellen):
sub absatz1
Doc = thisComponent
' hier sollte auf die aktuelle Seite zugegriffen werden statt aufs ganze Dokument:
seite = Doc.thisPage
Enum = seite.Text.createEnumeration
' hier sollte das erste Element von Enum ausgewählt werden:
TextElement = Enum.Element(0)
' hier sollte das erste Wort des in TextElement gespeicherten Absatzes extrahiert werden:
wortendpos = InStr(0,TextElement.string, ,20)
wort = left(TextElement.string,wortendpos)
' hier sollte dieses Wort an der Position des makroauslösenden Feldbefehls eingefügt werden:
ocursor=Doc.Text.createtextcursor()
Doc.Text.insertString(ocursor,wort,false)
end sub
bzw. fürs letzte Element von Enum = letzter Absatz:
TextElement = Enum.lastElement
Könnte evtl. auch http://www.dannenhoefer.de/faqstarbasic ... raphs.html hilfreich sein?
ich arbeite an einem Dokument im Wörterbuchstil und suche nun eine Möglichkeit, jeweils bestimmte Wörter der Seite mittels Feldbefehl in der Kopfzeile anzeigen zu lassen, wie man es aus nahezu allen Wörterbüchern kennt: Normalerweise findet man da in der Kopfzeile links das erste Wort des ersten Eintrags und rechts das erste Wort des letzten Eintrags. Um das ganze nicht unnötig kompliziert zu gestalten, bin ich gern bereit, keinen Eintrag über zwei Seiten laufen zu lassen, somit entspricht zumindest das erste Wort der ersten Zeile dem, was in der Kopfzeile links stehen soll.
Hat jemand eine Idee, wie ich einzelne Wörter automatisiert in die Kopfzeile bekomme?
Edit 01: Am besten geeignet wäre ein Feldbefehl (oder Makro?), der das erste Wort des ersten bzw. letzten Absatzes der Seite anzeigt.
Edit 02: Unter http://www.dannenhoefer.de/faqstarbasic ... eifen.html ist ein Hinweis zu finden, wie ich rangehen könnte (fett gedruckt unsichere/fehlende Stellen):
sub absatz1
Doc = thisComponent
' hier sollte auf die aktuelle Seite zugegriffen werden statt aufs ganze Dokument:
seite = Doc.thisPage
Enum = seite.Text.createEnumeration
' hier sollte das erste Element von Enum ausgewählt werden:
TextElement = Enum.Element(0)
' hier sollte das erste Wort des in TextElement gespeicherten Absatzes extrahiert werden:
wortendpos = InStr(0,TextElement.string, ,20)
wort = left(TextElement.string,wortendpos)
' hier sollte dieses Wort an der Position des makroauslösenden Feldbefehls eingefügt werden:
ocursor=Doc.Text.createtextcursor()
Doc.Text.insertString(ocursor,wort,false)
end sub
bzw. fürs letzte Element von Enum = letzter Absatz:
TextElement = Enum.lastElement
Könnte evtl. auch http://www.dannenhoefer.de/faqstarbasic ... raphs.html hilfreich sein?
Re: Feldbefehl für erstes Wort auf der Seite
Hallo,
einen Feldbefehl gibt es meines Wissens dafür nicht. Per Makro lässt sich das erste Wort des ersten und letzten Absatzes der Seite ermitteln (ich bastel' gerade noch).
Ein Problem wird noch die Dynamisierung der Kopfzeile sein, denn der Text der Kopfzeile erscheint ja auf allen Seiten. Eine Variante wäre, für jede Seite eine neue Seitenvorlage zu definieren.
Vielleicht weiß jemand Rat um es so zu lösen wie mit Kapitelüberschriften, die ja auch dynamisch eingebunden werden können.
einen Feldbefehl gibt es meines Wissens dafür nicht. Per Makro lässt sich das erste Wort des ersten und letzten Absatzes der Seite ermitteln (ich bastel' gerade noch).
Ein Problem wird noch die Dynamisierung der Kopfzeile sein, denn der Text der Kopfzeile erscheint ja auf allen Seiten. Eine Variante wäre, für jede Seite eine neue Seitenvorlage zu definieren.
Vielleicht weiß jemand Rat um es so zu lösen wie mit Kapitelüberschriften, die ja auch dynamisch eingebunden werden können.
Gruß,
mikele
mikele
Re: Feldbefehl für erstes Wort auf der Seite
Dieses Thema wurde vor mehr als vier Jahren schon einmal diskutiert. Am Ergebnis dürfte sich noch nichts geändert haben.nitsnatsnok hat geschrieben:ich arbeite an einem Dokument im Wörterbuchstil und suche nun eine Möglichkeit, jeweils bestimmte Wörter der Seite mittels Feldbefehl in der Kopfzeile anzeigen zu lassen, wie man es aus nahezu allen Wörterbüchern kennt
Mit Kopfzeilen ist wohl nichts zu machen, weil es dafür keinen dynamischen Feldbefehl gibt. Statt mit lauter unterschiedlichen Seitenvorlagen mit Kopfzeile zu arbeiten, bietet es sich stattdessen an, einen Textrahmen verankert Am Absatz mit der Orientierung an der gesamten Seite als Autotext zu erstellen und die Stichworte dann zu markieren und in den Textrahmen bei gedrückter Maustaste zu kopieren.
Die anhängende Beispieldatei stammt noch von dem zitierten Thread und wurde durch einen Softwarefehler zwischenzeitlich einschließlich meiner Antwort gelöscht.
- Dateianhänge
-
- Erstes und letztes Wort in der Kopfzeiler.odt
- (34.26 KiB) 288-mal heruntergeladen
Hast du schon mal einen Blick in die Writer-FAQ und in die Calc-FAQ des Forums geworfen?
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Re: Feldbefehl für erstes Wort auf der Seite
Hallo,
so nun habe ich (vorerst) genug gebastelt.
@Rocko: Ich habe mir mal erlaubt, deine Datei als Basis zu nehmen.
Das Makro erzeugt (wenn nicht schon vorhanden) auf jeder Seite einen Textrahmen mit dem Namen "KopfrahmenX", wobei X die Seitennummer ist.
Dieser Textrahmen ist an der Seite verankert und befindet sich im oberen Randbereich.
In diesen Textrahmen wird dann das jeweils erste Wort des ersten und letzten Absatzes der Seite eingefügt.
Beim jedem Start des Makros werden die Daten in den Rahmen aktualisiert bzw. neue angelegt.
so nun habe ich (vorerst) genug gebastelt.
@Rocko: Ich habe mir mal erlaubt, deine Datei als Basis zu nehmen.
Das Makro erzeugt (wenn nicht schon vorhanden) auf jeder Seite einen Textrahmen mit dem Namen "KopfrahmenX", wobei X die Seitennummer ist.
Dieser Textrahmen ist an der Seite verankert und befindet sich im oberen Randbereich.
In diesen Textrahmen wird dann das jeweils erste Wort des ersten und letzten Absatzes der Seite eingefügt.
Beim jedem Start des Makros werden die Daten in den Rahmen aktualisiert bzw. neue angelegt.
- Dateianhänge
-
- Erstes und letztes Wort in der Kopfzeile.odt
- (61.1 KiB) 287-mal heruntergeladen
Gruß,
mikele
mikele
-
- Beiträge: 22
- Registriert: Di 24. Jun 2014, 21:14
Re: Feldbefehl für erstes Wort auf der Seite
Unglaublich! Super, ich danke euch beiden vielmals!
Leider funktioniert die Positionierung des Rahmens noch nicht ganz, im Beispieldokument wird er problemlos mit folgender Positionierung erstellt:
Horizontal von links um 2 cm zu Gesamte Seite
Vertikal von oben um 1 cm zu Gesamte Seite
In meiner Datei funktioniert das (aufgrund abweichender Standardeinstellungen?) leider nicht, der dort erstellte Rahmen richtet sich in beiden Dimensionen am Seitentextbereich statt an der gesamten Seite aus, außerdem positioniert er sich vertikal „oben“ (was keinen Änderungswert zulässt) statt „(um x cm) von oben“. Abhilfe schaffen die folgenden Zeilen:
Habt vielen Dank für eure schnelle und kompetente Hilfe!
Für andere hier noch einige Tipps zum Individualisieren des Makros:
Seiten bestimmen, auf denen die Textrahmen erstellt werden sollen, im Original (mit „i = 1 to n“) sind das alle, im Beispiel hier die Seiten 6–9.
Breite des Textrahmens bestimmen – wenn er über die gesamte Breite des Seitentextbereichs gehen soll, entspricht das der Seitenbreite (21cm bei A4) abzüglich des rechten und linken Seitenrands, hier für 21cm - 1,5cm - 1,5cm = 18cm.
Unbedingt beachten: Für eine sinnvolle Positionierung des rechten Worts muss die tab(0).Position (weiter oben im Skript) auf denselben Wert gesetzt werden!
Höhe des Textrahmens bestimmen, hier 0,5cm.
Abstand zum linken Positionierungspunkt bestimmen (siehe oben) – wenn der Rahmen über die gesamte Breite des Seitentextbereichs gehen soll, entspricht das (bei Positionierung zur gesamten Seite) dem linken Seitenrand, hier 1,5cm.
Abstand zum oberen Positionierungspunkt bestimmen, sinnvoll ist der obere Seitenrand abzüglich 1cm, hier 0,5cm.
Leider funktioniert die Positionierung des Rahmens noch nicht ganz, im Beispieldokument wird er problemlos mit folgender Positionierung erstellt:
Horizontal von links um 2 cm zu Gesamte Seite
Vertikal von oben um 1 cm zu Gesamte Seite
In meiner Datei funktioniert das (aufgrund abweichender Standardeinstellungen?) leider nicht, der dort erstellte Rahmen richtet sich in beiden Dimensionen am Seitentextbereich statt an der gesamten Seite aus, außerdem positioniert er sich vertikal „oben“ (was keinen Änderungswert zulässt) statt „(um x cm) von oben“. Abhilfe schaffen die folgenden Zeilen:
Code: Alles auswählen
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
.HoriOrientRelation = frame 'horizontale Positionierung zu „Gesamte Seite“
.HoriOrientPosition = 2000 '2 cm von links
.VertOrient = fromtop 'vertikale Positionierung „von oben“
.VertOrientRelation = frame 'vertikale Positionierung zu „Gesamte Seite“
.VertOrientPosition = 1000 '1 cm von oben
Für andere hier noch einige Tipps zum Individualisieren des Makros:
Seiten bestimmen, auf denen die Textrahmen erstellt werden sollen, im Original (mit „i = 1 to n“) sind das alle, im Beispiel hier die Seiten 6–9.
Code: Alles auswählen
for i = 6 to 9
Unbedingt beachten: Für eine sinnvolle Positionierung des rechten Worts muss die tab(0).Position (weiter oben im Skript) auf denselben Wert gesetzt werden!
Code: Alles auswählen
tab(0).Position = 18000
.width = 18000
Code: Alles auswählen
.height = 500
Code: Alles auswählen
.HoriOrientPosition = 1500
Code: Alles auswählen
.VertOrientPosition = 500
Re: Feldbefehl für erstes Wort auf der Seite
Hallo,
ich habe mal noch ein bisschen weiter gebastelt.
Die Textrahmen werden nun entsprechend der Seitengröße und -rahmen erstellt. Die Logik ist insofern verändert, als dass die vorhandenen Kopftextrahmen gelöscht werden und druch neue ersetzt werden. Dadurch vereinfacht sich der Umgang, wenn in Nachhinein z. B. die Seitenränder des Dokuments verändert werden oder einzelne Seiten andere Formate haben.
ich habe mal noch ein bisschen weiter gebastelt.
Die Textrahmen werden nun entsprechend der Seitengröße und -rahmen erstellt. Die Logik ist insofern verändert, als dass die vorhandenen Kopftextrahmen gelöscht werden und druch neue ersetzt werden. Dadurch vereinfacht sich der Umgang, wenn in Nachhinein z. B. die Seitenränder des Dokuments verändert werden oder einzelne Seiten andere Formate haben.
- Dateianhänge
-
- Erstes und letztes Wort in der Kopfzeile2.odt
- (81.06 KiB) 293-mal heruntergeladen
Gruß,
mikele
mikele
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: Feldbefehl für erstes Wort auf der Seite
Toll, was Du geschaffen hast, Mikele. Ich hab Deine letzte Datei bei mir ausprobiert und nach erneutem Durchlauf war auch alles so, wie nitsnatsnok sich das wünschte. Ich wußte ja, ihr Programmierexperten seid doch die Raffiniertesten.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.