BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
many
Beiträge: 4
Registriert: Mi 16. Jan 2019, 11:44

Python-Macro in *ODS einbinden

Beitrag von many » Mi 16. Jan 2019, 11:54

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).

many
Beiträge: 4
Registriert: Mi 16. Jan 2019, 11:44

Re: Python-Macro in *ODS einbinden

Beitrag von many » Mi 16. Jan 2019, 12:06

Hey many, ich habe die Lösung gefunden ;)

http://christopher5106.github.io/office ... acros.html

many
Beiträge: 4
Registriert: Mi 16. Jan 2019, 11:44

Re: Python-Macro in *ODS einbinden

Beitrag von many » Mi 16. Jan 2019, 16:06

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.

many
Beiträge: 4
Registriert: Mi 16. Jan 2019, 11:44

Re: Python-Macro in *ODS einbinden

Beitrag von many » Mi 16. Jan 2019, 18:15

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 ;)

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Python-Macro in *ODS einbinden

Beitrag von mikele » Fr 18. Jan 2019, 22:59

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

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)
Abgespeichert in z. B. insert_macro.py kann es mit zwei Parametern versehen aufgerufen werden:

Code: Alles auswählen

python insert_macro.py tabellenkalkulationsdatei.ods macro.py
und bindet die Datei macro.py in die ods-Datei ein.
Getestet habe ich es unter Linux. Unter Windows wird wahrscheinlich die Zeile

Code: Alles auswählen

macroname=sys.argv[2].split('/')[-1]
in

Code: Alles auswählen

macroname=sys.argv[2].split('\')[-1]
geändert werden.
Die Python-Profis haben bestimmt noch ein paar Verbesserungsvorschläge.
Gruß,
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 ❤️

Antworten