🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
Aufruf externes Python Skrip über Schaltfläche
Aufruf externes Python Skrip über Schaltfläche
Hallo,
ich stelle im Zusammenhang mit der Ablösung von MS Office durch LibreOffice gerade eine kleine Anwendung von mir um. Ein Teil der Anwendung habe ich in Form von externen Python Skripten umgesetzt. Diese möchte ich nun innerhalb von Calc mittels Schaltflächen starten.
Die Skripte funktionieren in der Entwicklungsumgebung und wenn ich sie direkt im Dateiexplorer aufrufe.
Wenn ich in innerhalb von Calc eine Schaltfläche verwende und darüber ein Makro starte mit dem Aufruf per Mausklick, passiert bis auf ein kurzes Aufblitzen eines schwarzen Fensters nichts.
Das Makro sieht so aus:
Sub RunPythonScript1
Dim oShell As Object
Dim scriptPath As String
scriptPath = "G:\Finanzen\Entwicklung\Bestand_ISIN_WKN_ermitteln.py" ' Pfad zum Python-Script
oShell = CreateObject("WScript.Shell")
oShell.Run "python " & scriptPath
End Sub
Hat jemand einen Tipp für mich, woran der Aufruf scheitern könnte?
Viele Grüße
rogschmi
ich stelle im Zusammenhang mit der Ablösung von MS Office durch LibreOffice gerade eine kleine Anwendung von mir um. Ein Teil der Anwendung habe ich in Form von externen Python Skripten umgesetzt. Diese möchte ich nun innerhalb von Calc mittels Schaltflächen starten.
Die Skripte funktionieren in der Entwicklungsumgebung und wenn ich sie direkt im Dateiexplorer aufrufe.
Wenn ich in innerhalb von Calc eine Schaltfläche verwende und darüber ein Makro starte mit dem Aufruf per Mausklick, passiert bis auf ein kurzes Aufblitzen eines schwarzen Fensters nichts.
Das Makro sieht so aus:
Sub RunPythonScript1
Dim oShell As Object
Dim scriptPath As String
scriptPath = "G:\Finanzen\Entwicklung\Bestand_ISIN_WKN_ermitteln.py" ' Pfad zum Python-Script
oShell = CreateObject("WScript.Shell")
oShell.Run "python " & scriptPath
End Sub
Hat jemand einen Tipp für mich, woran der Aufruf scheitern könnte?
Viele Grüße
rogschmi
HP Elitedesk | Windows 11 | LibreOffice 25.8.x
Re: Aufruf externes Python Skrip über Schaltfläche
Du hast innerhalb von LO eine interne Python-umgebung, die du direkt benutzen kannst, ohne Umweg über Basic & »CreateObject("WScript.Shell")« !
zeige den python-code aus »G:\Finanzen\Entwicklung\Bestand_ISIN_WKN_ermitteln.py«
zeige den python-code aus »G:\Finanzen\Entwicklung\Bestand_ISIN_WKN_ermitteln.py«
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
Re: Aufruf externes Python Skrip über Schaltfläche
Ja, ich weiß, dass es eine interne Pythonumgebung in LO gibt. Da ich in Zukunft aber weitere Themen mit Python bearbeiten möchte, die nichts mit Tabellenkalkulation zu tun haben, wäre es mir lieber, einige Teile dieser Anwendung hier entsprechend auch über die Entwicklungsumgebung zu pflegen und zu betreiben. Aber ich werde mir das trotzdem mal ansehen und ausprobieren. Danke!
Code:
PS: Ich habe den einfachen Klassiker "Hallo Welt" ausprobiert, das führt zum gleichen Effekt. Ich kann allerdings über die Schaltfläche und Steuerelement-Eigenschaften - Allgemein - Aktion - Dokument/Webseite öffnen eine Anwendung starten, z.B. notepad++. Offenbar funktioniert in meiner Situation das Zusammenspiel zwischen Calc und Python noch nicht. Die Umgebungsvariablen sind gesetzt, die Ordner für Python und der Ordner mit meinen Dateien sind eingetragen.
Code:
Code: Alles auswählen
import openpyxl
import pandas as pd
import os
import contextlib
import datetime
import tkinter as tk
from tkinter import filedialog, messagebox
# Dateinamen
excel_datei = "Test.xlsm"
isin_datei = "Bestand_ISIN_WKN.txt"
log_isin_datei = "Log_Bestand_ISIN_WKN.txt"
#isin_datei löschen, falls sie existiert
with contextlib.suppress(FileNotFoundError):
os.remove(isin_datei)
# Excel-Datei einlesen
xls = pd.ExcelFile(excel_datei)
df = pd.read_excel(xls, sheet_name="Stammdaten")
wb = openpyxl.load_workbook(excel_datei, data_only=True)
sheet = wb["Depot"]
# Eine leere Liste für die Ergebnisse erstellen
ergebnisse = []
# Werte für Log setzen
anzahl = 0
fehler = 0
# Ausgabewerte ermitteln (Liste der ISIN mit WKN im Bestand)
with open(isin_datei, "w") as f:
empty_count = 0 # Zähler für leere Einträge
for row in range(6, sheet.max_row + 1): # Beginnt bei Zeile 6
isin = sheet.cell(row=row, column=3).value # Spalte C (3. Spalte)
if isin is not None and isin != "":
anzahl = anzahl + 1
wkn = df[df.iloc[:, 0] == isin].iloc[:, 1].values
if wkn.size > 0:
# Falls die ISIN gefunden wurde, den Wert aus Spalte B anhängen
ergebnisse.append(f"{isin}, {wkn[0]}")
else:
# nur ISIN in isin_datei schreiben
ergebnisse.append(f"{isin}, kein Wert")
fehler = fehler + 1
empty_count = 0 # Zurücksetzen des leeren Zählers
else:
empty_count += 1
# Schleife beenden, wenn mehr als 8 hintere Leerwerte entdeckt werden
if empty_count > 8:
break
# Ergebnisse in isin_datei schreiben
with open(isin_datei, "w") as f:
for ergebnis in ergebnisse:
f.write(ergebnis + '\n')
# Logdatei schreiben
aktuelles_datum_uhrzeit = datetime.datetime.now()
with open(log_isin_datei, 'a') as log:
log.write (f"{aktuelles_datum_uhrzeit.strftime('%d.%m.%Y %H:%M:%S')} - Anzahl ISIN_WKN: {anzahl} - Anzahl Fehler: {fehler}" +'\n')
#Abschlussmeldung
info_text =f"ISIN und WKN gespeichert! Fehler: {fehler}"
messagebox.showinfo("Fertig", info_text)
print(f"Die Werte wurden erfolgreich in die Datei '{isin_datei}' übertragen.")
HP Elitedesk | Windows 11 | LibreOffice 25.8.x
Re: Aufruf externes Python Skrip über Schaltfläche
Hallo
Der »Hallo Welt« -Kassiker existiert bereits intern!
Ansonsten:
der gezeigte Code benötigt keinen laufenden LO-prozess, nichtmal eine vorhandene LO-installation!
wenn du das trotzdem aus Lo starten möchtest, würde ich statt basic & CreateObject("WScript.Shell") mal https://docs.python.org/3/library/subpr ... subprocess probieren.
ungetestet etwa so:
Der »Hallo Welt« -Kassiker existiert bereits intern!
Ansonsten:
der gezeigte Code benötigt keinen laufenden LO-prozess, nichtmal eine vorhandene LO-installation!
wenn du das trotzdem aus Lo starten möchtest, würde ich statt basic & CreateObject("WScript.Shell") mal https://docs.python.org/3/library/subpr ... subprocess probieren.
ungetestet etwa so:
Code: Alles auswählen
from subprocess import run
def run_external(*event):
run(["G:/Finanzen/Entwicklung/Bestand_ISIN_WKN_ermitteln.py" ])
#ggf
#run(['pfad/zur/python.exe', "G:/Finanzen/Entwicklung/Bestand_ISIN_WKN_ermitteln.py"]) LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
Re: Aufruf externes Python Skrip über Schaltfläche
Funktioniert spontan nicht, aber danke, ich schaue mir das in Ruhe an.karolus hat geschrieben: ↑Do 12. Feb 2026, 14:15https://docs.python.org/3/library/subpr ... subprocess probieren.
ungetestet etwa so:
Code: Alles auswählen
from subprocess import run def run_external(*event): run(["G:/Finanzen/Entwicklung/Bestand_ISIN_WKN_ermitteln.py" ]) #ggf #run(['pfad/zur/python.exe', "G:/Finanzen/Entwicklung/Bestand_ISIN_WKN_ermitteln.py"])
HP Elitedesk | Windows 11 | LibreOffice 25.8.x
An alle, die das LibreOffice-Forum gern nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️