Seite 1 von 1

Nach einem Feldbefehl suchen

Verfasst: Fr 26. Apr 2013, 13:43
von teertinker
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

Re: Nach einem Feldbefehl suchen

Verfasst: Fr 26. Apr 2013, 15:45
von karolus
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

Re: Nach einem Feldbefehl suchen

Verfasst: Fr 26. Apr 2013, 16:14
von teertinker
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

Re: Nach einem Feldbefehl suchen

Verfasst: Fr 26. Apr 2013, 16:25
von karolus
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()
 

Re: Nach einem Feldbefehl suchen

Verfasst: Mo 29. Apr 2013, 14:00
von teertinker
Vielen Lieben Dank für den Code!

Re: Nach einem Feldbefehl suchen

Verfasst: Di 30. Apr 2013, 17:29
von teertinker
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....

Re: Nach einem Feldbefehl suchen

Verfasst: Mi 1. Mai 2013, 02:42
von karolus
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