ich habe ein OOo text Dokument bei dem ich eine Textstelle durch einen
anderen Text erstezen möchte. Ich finde in odfpy keine Funktion zum
finden . . .
joh
bei pyuno ist mir die Lernkurve zu steil, weil ich nur ein paar Rechnungen generierenproblembär hat geschrieben:Kenne odfpy noch nicht. Steuere OpenOffice mit Python meist über pyuno.
Ah, dann könnte das hier was für Dich sein:joh# hat geschrieben:bei pyuno ist mir die Lernkurve zu steil, weil ich nur ein paar Rechnungen generierenproblembär hat geschrieben:Kenne odfpy noch nicht. Steuere OpenOffice mit Python meist über pyuno.
will, wo an 2, 3 Stellen Text einzufügen ist...
Im Prinzip schon, aber nicht, wenn man schon eine fertige Rechnung hat und da nur zu zwei, drei Stellen springen will, um etwa eine Adresse oder die Rechnungsnummer einzufügen. Man setzt einfach ein paar Textmarken mit (Einfügen/Textmarke), springt die an wie in dem Link oben gezeigt und fügt seinen Text ein. Das kann man relativ schnell verstehen, in sagen wir einer halben Stunde.lunar hat geschrieben:Von UNO rate ich nachdrücklich ab, denn die UNO-API ist komplex jenseits von Gut und Böse, und geeignet, Dich ins Irrenhaus zu bringen, bevor Du Dein Programm fertiggestellt hast
probier ich....problembär hat geschrieben:Ah, dann könnte das hier was für Dich sein:joh# hat geschrieben:bei pyuno ist mir die Lernkurve zu steil, weil ich nur ein paar Rechnungen generierenproblembär hat geschrieben:Kenne odfpy noch nicht. Steuere OpenOffice mit Python meist über pyuno.
will, wo an 2, 3 Stellen Text einzufügen ist...
http://www.oooforum.org/forum/viewtopic.phtml?t=37839
Was ich noch nicht geschafft habe ist, die Ordner-Struktur wieder ins .odt zu bekommen:lunar hat geschrieben:@joh#: . . .
Vor diesem Hintergrund ist es wahrscheinlich wirklich am einfachsten, das Dokument auf XML-Ebene zu verarbeiten. Zeige uns doch Deinen Quelltext dazu und die Fehlermeldung, die Du erhältst, dann können wir Dir auch konkrete Hilfestellung leisten.
Code: Alles auswählen
'''
Ordner-Struktur innerhalb von .odt:
│ ├─ temp content.xml, manifest.rdf, meta.xml, mimetype, settings.xml, styles.xml
│ │ │ ├─ Configurations2
│ │ │ │ ├─ accelerator current.xml
│ │ │ │ ├─ floater
│ │ │ │ ├─ images
└─ Bitmaps
│ │ │ │ ├─ menubar
│ │ │ │ ├─ popupmenu
│ │ │ │ ├─ progressbar
│ │ │ │ ├─ statusbar
│ │ │ │ ├─ toolbar
│ │ │ │ └─ toolpanel
│ │ │ ├─ META-INF manifest.xml
│ │ │ └─ Thumbnails thumbnail.png
------------------------------------------------------------------
(u'', u'mimetype')
(u'Configurations2/statusbar', u'')
(u'Configurations2/accelerator', u'current.xml')
(u'Configurations2/floater', u'')
(u'Configurations2/popupmenu', u'')
(u'Configurations2/progressbar', u'')
(u'Configurations2/toolpanel', u'')
(u'Configurations2/menubar', u'')
(u'Configurations2/toolbar', u'')
(u'Configurations2/images/Bitmaps', u'')
(u'', u'content.xml')
(u'', u'manifest.rdf')
(u'', u'styles.xml')
(u'', u'meta.xml')
(u'Thumbnails', u'thumbnail.png')
(u'', u'settings.xml')
(u'META-INF', u'manifest.xml')
'''
import os, shutil, zipfile, platform, glob
inputfilename = ur"Rechnungsvorlage2.odt"
outp_filename = ur"RE001.odt"
#die im odt-zipfile befindliche Verzeichnisstruktur anlegen:
inputfile = zipfile.ZipFile(inputfilename, 'r')
for name in inputfile.namelist():
data = inputfile.read(name) #DateiInhalt
#print name.ljust(30), len(data), repr(data[:10])
namet= os.path.split(name)
print namet
#wenn es noch EIN oder ZWEI Umterverz. mehr ist:
if namet[0]:
dummy1=namet[0]
os.makedirs(dummy1) #das anlegen
#wenn darin noch eine Datei anzulegen ist:
if namet[1]:
dummy2=namet[0]+os.sep+namet[1]
tfile = open(dummy2 ,'w')
tfile.write(data)
tfile.close()
#wenn es nur ein Dateiname ist:
else:
dummy3= namet[1]
tfile = open(dummy3,'w')
tfile.write(data)
tfile.close()
#bis hierher geht es
#jetzt wäre content.xml zu manipulieren
#ab hier muss jetzt die Ordnerstruktur wieder ins odt-zipfile:
outp_file = zipfile.ZipFile(outp_filename, "w")
outp_file.write(odt_text)
Ja, mach' mal. Wenn das Beispielskript dort bei Dir direkt läuft (mußt halt noch "uno.py" in Deinen Python-Pfad kopieren, siehe unter Anmerkung 1. dort), solltest Du die "Zauberei" schon erkennen. Kostet sicher weniger Zeit als im xml rumzuwühlen.joh# hat geschrieben:probier ich....
wenn Zeit ist
Dazujoh# hat geschrieben:Was ich noch nicht geschafft habe ist, die Ordner-Struktur wieder ins .odt zu bekommen
Code: Alles auswählen
shutil.make_archive("desired_zipfile_name_no", "zip", "name_of_the_folder_you_want_to_zip")Code: Alles auswählen
zip -r file.zip directorySehr aufbauend mal wieder.lunar hat geschrieben:Wenn Du schon an der eigentlich nicht schwierigen Aufgabe scheiterst, Dateien in ein ZIP-Archiv zu verpacken, ...
der Hinweis auf os.walk ist gutlunar hat geschrieben:@joh#: Du musst die Ordnerstruktur natürlich auch wieder in derselben Form manuell erzeugen. Dazu kannst "os.walk()" nutzen, um über die Verzeichnisebenen zu iterieren, den Rest findest Du dann in der Dokumentation zu "zipfile". .
Nein, dazu reicht es gerade noch, die letzten Zeilen sollten nur andeuten: "an dieser Stelle muss jetzt alles wieder ins Körbchenlunar hat geschrieben: Hast Du gedacht, ".write()" errät auf irgendeine magische Weise die richtige Ordnerstruktur?
lunar hat geschrieben:@problembär: Es ist weder meine Aufgabe noch mein Anliegen, "aufbauend" zu sein. Für aufbauende Gespräche gibt es Freunde, Familie und Therapeuten (in wahlfreier Reihenfolge), hier gibt es nur ehrliche Meinungen, technische Hilfestellung und realistische Einschätzungen.
lunar schrieb doch es sei nicht seine Aufgabe - jedem steht es frei, seine Rolle hier anders zu interpretieren, so lange sie sich im Rahmen der Forenregeln bewegen. Es gibt auch User hier, die andere ermutigen und bewusst emotional aufbauende Passagen in ihre Postings einstreuen. Das hängt immer vom speziellen Fall ab. Im übrigen erscheint es mir so, als habe joh# mit lunars Postings keinerlei Probleme gehabt - worüber regst Du Dich also auf?problembär hat geschrieben:Das erklärt einiges. So eine absichtlich "nicht-freundliche" Foren-"Community" wie hier ist mir noch nirgendwo untergekommen. Es ist einfach unglaublich! Unglaublich schlecht. So behandelt man keine Fragesteller und Mit-Antworter in einem Forum.