🍀 Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! 🍀
❤️ Nur noch wenige Stunden, um das Ziel zu erreichen. Vielen lieben Dank! ❤️
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig ihr Wissen teilen.<<
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen Dank!
🤗 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.