🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Python-Macro in *ODS einbinden
Python-Macro in *ODS einbinden
Hey ihrs!
Ich habe ein Script geschrieben, dass ich gerne als Macro in eine LibreOffice-Tabelle einbinden möchte, da die Eingangsparameter sowieso in eine Tabelle eingetragen sein müssen.
Wie ich Python-Macros in LibreOffice einbinde und ausführe weiß ich. Aber ich möchte, dass die Macros in der *.ods implementiert sind. Der "normale" Weg scheint ja das Speichern im Python-Verzeichnis der Libre-Office-Version zu sein. Welche Wege gibt es da? Ich habe bereits nach Lösungen gesucht, finde aber nichts 100%ig passendes (oder ich habs nicht richtig verstanden).
Ich habe ein Script geschrieben, dass ich gerne als Macro in eine LibreOffice-Tabelle einbinden möchte, da die Eingangsparameter sowieso in eine Tabelle eingetragen sein müssen.
Wie ich Python-Macros in LibreOffice einbinde und ausführe weiß ich. Aber ich möchte, dass die Macros in der *.ods implementiert sind. Der "normale" Weg scheint ja das Speichern im Python-Verzeichnis der Libre-Office-Version zu sein. Welche Wege gibt es da? Ich habe bereits nach Lösungen gesucht, finde aber nichts 100%ig passendes (oder ich habs nicht richtig verstanden).
Re: Python-Macro in *ODS einbinden
Heyhey.
Ich bekomme mit der oben genannten Methode nur "kaputte" *.ods-Files. Hat irgendwer eine funktionierende Methode mit der ich mich einarbeiten kann? Ich würde das Script ungerne in BASIC umschreiben.
Ich bekomme mit der oben genannten Methode nur "kaputte" *.ods-Files. Hat irgendwer eine funktionierende Methode mit der ich mich einarbeiten kann? Ich würde das Script ungerne in BASIC umschreiben.
Re: Python-Macro in *ODS einbinden
https://www.uni-due.de/~abi070/files/OO ... ericht.pdf
Ich hab es jetzt per Hand (durch die genannte PDF) geschafft eine *ods so zu manipulieren, dass die Python-Scripte implementiert sind. Damit habe ich ordentlich was gelernt und einfache Py-Scripte bekommen jetzt wohl öfter eine LibreCalc-GUI
Ich hab es jetzt per Hand (durch die genannte PDF) geschafft eine *ods so zu manipulieren, dass die Python-Scripte implementiert sind. Damit habe ich ordentlich was gelernt und einfache Py-Scripte bekommen jetzt wohl öfter eine LibreCalc-GUI

Re: Python-Macro in *ODS einbinden
Hallo,
das Python-Script zum Einbinden von Python-Makros in eine ods-Datei finde ich spannend. Da es aber die geänderte META-INF/manifest.xml zusätzlich in das ods-Archiv schreibt (sodass dann zwei solche Dateien vorhanden sind), habe ich etwas weiter gesucht und zusammengeschustert.
Das Schnipsel aus https://stackoverflow.com/questions/513 ... ile-module führte zu
Abgespeichert in z. B. insert_macro.py kann es mit zwei Parametern versehen aufgerufen werden:
und bindet die Datei macro.py in die ods-Datei ein.
Getestet habe ich es unter Linux. Unter Windows wird wahrscheinlich die Zeile
in geändert werden.
Die Python-Profis haben bestimmt noch ein paar Verbesserungsvorschläge.
das Python-Script zum Einbinden von Python-Makros in eine ods-Datei finde ich spannend. Da es aber die geänderte META-INF/manifest.xml zusätzlich in das ods-Archiv schreibt (sodass dann zwei solche Dateien vorhanden sind), habe ich etwas weiter gesucht und zusammengeschustert.
Das Schnipsel aus https://stackoverflow.com/questions/513 ... ile-module führte zu
Code: Alles auswählen
import zipfile
import sys
macroname=sys.argv[2].split('/')[-1]
filename = sys.argv[1][:len(sys.argv[1])-4]+'_mit_Makro'+sys.argv[1][-4:]
print("Open file " + sys.argv[1])
doc = zipfile.ZipFile(sys.argv[1],'r')
manifest = []
for line in doc.open('META-INF/manifest.xml'):
if '</manifest:manifest>' in line.decode('utf-8'):
for path in ['Scripts/','Scripts/python/','Scripts/python/'+macroname]:
manifest.append(' <manifest:file-entry manifest:media-type="application/binary" manifest:full-path="%s"/>' % path)
manifest.append(line.decode('utf-8'))
zout = zipfile.ZipFile (filename, 'w')
for item in doc.infolist():
buffer = doc.read(item.filename)
if (item.filename != 'META-INF/manifest.xml'):
zout.writestr(item, buffer)
zout.writestr('META-INF/manifest.xml', ''.join(manifest))
zout.write(sys.argv[2], "Scripts/python/"+macroname)
zout.close()
doc.close()
print("File created: "+filename)
Code: Alles auswählen
python insert_macro.py tabellenkalkulationsdatei.ods macro.py
Getestet habe ich es unter Linux. Unter Windows wird wahrscheinlich die Zeile
Code: Alles auswählen
macroname=sys.argv[2].split('/')[-1]
Code: Alles auswählen
macroname=sys.argv[2].split('\')[-1]
Die Python-Profis haben bestimmt noch ein paar Verbesserungsvorschläge.
Gruß,
mikele
mikele
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.