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"
------------------------------
So hab es gefunden. Es funktioniert wenigstens.
Seitenformat bleibt auch.
Muss dann nur eine .odt(MyCry1) mit odfpy erstellen und danach löschen
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: