Python und OpenDocument. Wie macht man mit OdfPy löschen vom Textinhalt?

ChuckBor1s

New member
Moin Leute.
Komme gerade bei einer Kleinigkeit nicht weiter.
Möchte mit OdfPy mein .odt Dokument laden den alten Inhalt löschen und dann anschließend den neuen Text hinzufügen.
Habe nur die old_text.replace() Methode gefunden. Wenn man diese benutzen möchte, dann weiß ich nicht wie man den ganzen doc/textobject(vermute ich) leeren soll. Habe schon länger danach gegoogelt aber gibts nur Beispiele mit konkreten Wörtern. Eine Möglichkeit um den alten Inhalt zu löschen habe ich nicht gefunden. OdfPy Dokumentation in einer verständlichen Form habe ich nicht gesehen.
Deswegen bitte ich um Hilfe, vllt. ist die Lösung auch zu einfach und ich die aus Unerfahrenheit nicht sehe.
Und warum ich kein neues Dokument erstelle ist der Seitenformat in A6, den ich beibehalten möchte.
Bei OpenOfficeWriter druckt er gleich A6(habe kleine Zettels).
Mit Pdf druckt er nicht gleich A6 sondern nimmt die Voreinstellungen des Druckers (A4).

Vielen Dank im voraus.

hier ist bischen Code, habe vom StackOverflow einen Beispielcode.
Nun wenn dieser Beispielcode funktionieren würde, dann hätte ich es
über eine Krücke geschafft. Die letzten Einträge werde ich als .txt ablegen
und bei der nächsten Benutzung werden die geholt.
Es kommt eine Fehlermeldung
"old_text = teletype.extractText(texts)
IndexError: list index out of range"

Python:
#ODT - text einfügen für grün
from odf.opendocument import load
from odf import text,teletype
textdoc = load("MyCry.odt")
texts = textdoc.getElementsByType(text.P)
s = len(texts)
for i in range(s):
    old_text = teletype.extractText(texts[i])
    new_text = old_text.replace('Replace','Is')
    new_S = text.P()
    new_S.setAttribute("stylename",texts[i].getAttribute("stylename"))
    new_S.addText(new_text)
    texts[i].parentNode.insertBefore(new_S,texts[i])
    #########################
    texts[i].parentNode.removeChild(texts[i])
    #hier wird der Fehler ausgelöst. Habe von oben nach unten je Zeile auskommentiert 
textdoc.save('myfile.odt')
------------------------------
So hab es gefunden. Es funktioniert wenigstens.
Seitenformat bleibt auch.
Muss dann nur eine .odt(MyCry1) mit odfpy erstellen und danach löschen

Python:
from ezodf import newdoc
import os
import zipfile
import tempfile

namef = "MyCry.odt"
a = zipfile.ZipFile('MyCry1.odt')
content = a.read('content.xml')
content = str(content.decode(encoding='utf8'))
content = str.replace(content,"Replace", "It")
content = str.replace(content, 'Me', "works")

def updateZip(zipname, filename, data):
    # generate a temp file
    tmpfd, tmpname = tempfile.mkstemp(dir=os.path.dirname(zipname))
    os.close(tmpfd)

    # create a temp copy of the archive without filename
    with zipfile.ZipFile(zipname, 'r') as zin:
        with zipfile.ZipFile(tmpname, 'w') as zout:
            zout.comment = zin.comment # preserve the comment
            for item in zin.infolist():
                if item.filename != filename:
                    zout.writestr(item, zin.read(item.filename))

    # replace with the temp archive
    os.remove(zipname)
    os.rename(tmpname, zipname)

    # now add filename with its new data
    with zipfile.ZipFile(zipname, mode='a', compression=zipfile.ZIP_DEFLATED) as zf:
        zf.writestr(filename, data)

updateZip(namef, 'content.xml', content)
 
Zuletzt bearbeitet:
Zurück
Oben