Wir sind auf Ihre Unterstützung angewiesen!
💚 BITTE helfen Sie uns HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 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 nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️