🙏 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!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Nach einem Feldbefehl suchen

Alles zur Programmierung im LibreOffice.
Antworten
teertinker
Beiträge: 12
Registriert: Fr 26. Apr 2013, 13:32

Nach einem Feldbefehl suchen

Beitrag von teertinker » Fr 26. Apr 2013, 13:43

Hallo,
ich habe ein Dokument in dem zahlreiche Feldbefehle mit dem gleichen Muster des Feldnamens sind ( Feldbefehl_LO_laufende nummer).

Ich möchte nun gerne alle Feldbefehle mit dem Muster in Text umwandeln.
[Feldbefehl_LO_laufende nummer] soll zu <!Feldbefehl_LO_laufende nummer!> im fließtext werden.
Der Wert der einzelnen Feldbefehle ist für mich dabei irrelevant und kann verloren gehen.

Mir ist leider unklar, wie ich über ein Makro nach Feldbefehlen suchen kann.


Ich wäre über einen Hinweis für dieses kleine Problem sehr dankbar.

Felix

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Nach einem Feldbefehl suchen

Beitrag von karolus » Fr 26. Apr 2013, 15:45

Hallo
Sind ausser diesen Feldbefehlen noch andere Feldbefehle im Fliestext die unverändert bleiben sollen?

Folgendes ersetzt alle Feldbefehle durch '<!vorheriger_text>'

Code: Alles auswählen

def fieldsreplace():
    doc = XSCRIPTCONTEXT.getDocument()
    textfields = doc.getTextFields()
    for field in iterable( textfields):
        field.Anchor.setString( '<!{}>'.format( field.Anchor.getString() ) )

def iterable( enumerable ):
    enum = enumerable.createEnumeration()
    while enum.hasMoreElements():
        yield enum.nextElement() 
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

teertinker
Beiträge: 12
Registriert: Fr 26. Apr 2013, 13:32

Re: Nach einem Feldbefehl suchen

Beitrag von teertinker » Fr 26. Apr 2013, 16:14

Liebe/r Karolus,
vielen Dank!
Ja es sind noch andere Feldbefehle im Text. Es sollten nur jene verändert werden, deren anfangsstring "Feldbefehl_LO" ist.

aber müsste ich dazu nicht nur eine if bedingung vor die zeile:

field.Anchor.setString( '<!{}>'.format( field.Anchor.getString() ) )

setzen?


VG
Felix

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Nach einem Feldbefehl suchen

Beitrag von karolus » Fr 26. Apr 2013, 16:25

Hallo
Ja das müsstest du.

Code: Alles auswählen

def fieldsreplace():
    doc = XSCRIPTCONTEXT.getDocument()
    textfields = doc.getTextFields()
    for field in iterable( textfields):
        s = field.Anchor.getString()
        if s.startswith('Feldbefehl_LO'):
            field.Anchor.setString( '<!{}!>'.format( s ) )

def iterable( enumerable ):
    enum = enumerable.createEnumeration()
    while enum.hasMoreElements():
        yield enum.nextElement()
 
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

teertinker
Beiträge: 12
Registriert: Fr 26. Apr 2013, 13:32

Re: Nach einem Feldbefehl suchen

Beitrag von teertinker » Mo 29. Apr 2013, 14:00

Vielen Lieben Dank für den Code!

teertinker
Beiträge: 12
Registriert: Fr 26. Apr 2013, 13:32

Re: Nach einem Feldbefehl suchen

Beitrag von teertinker » Di 30. Apr 2013, 17:29

mhh.
Wenn ich das richtig sehe, ist der code ein python script. Irgendwie schaffe ich es nicht den code auf Libre Office Basic umzuschreiben. Ich selbe habe ein wenig programmierkenntnisse in freepascal aber das hilft mir auch nur beim nachvollziehen geschriebenen codes, nicht aber beim selber erstellen....

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Nach einem Feldbefehl suchen

Beitrag von karolus » Mi 1. Mai 2013, 02:42

Hallo
Das siehst du richtig, du musst es aber nicht übersetzen - es muss nur an die richtige Stelle kopiert werden damit es in allen Dokumenten zur Verfügung steht.

Weil ich gerade in der Nachbarschaft ein Script
mit eingebauter Installierfunktion gepostet habe bekommst du auch eins:
libreforum_11398.odt
(11.07 KiB) 260-mal heruntergeladen
Der SourceCode dazu:

Code: Alles auswählen

import uno
from os import path

try:
    context = XSCRIPTCONTEXT
except:
    pass
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")

def install_me(*_):
    """
    Funktion zum kopieren dieses eingebetteten Pythonscripts
    ins den .userconfig_python_pfad"""

    pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
    filename = path.basename(__file__)
    if not file_access.isFolder( pythonfolder):
        file_access.createFolder(pythonfolder)
    file_access.copy(__file__, path.join( pythonfolder, filename))




def fieldsreplace():
    doc = context.getDocument()
    textfields = doc.getTextFields()
    for field in iterable( textfields):
        s = field.Anchor.getString()
        if s.startswith('Feldbefehl_LO'):
            field.Anchor.setString( '<!{}!>'.format( s ) )

def iterable( enumerable ):
    enum = enumerable.createEnumeration()
    while enum.hasMoreElements():
        yield enum.nextElement()  
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)


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.



Antworten