calc+basic+python: use python-Sub within basic

Hier nun die deutsche Version meiner Frage:

Ich habe einige Python-Routinen (Siehe Beispiel), die ich gerne auch in einem Calc-Makro einsetzen würde. Leider habe ich keinen Weg gefunden, wie ich diese aus dem Calc-Makro (Basic) aufrufen und Parameter übergeben sowie die Ergebnisse zurückbekommen kann.

Ich stelle mir den Basic-Aufruf in etwa so vor:

hlp = PyFindStructureInString("a","ghsfhaehjg",1)

Der PythonCode sieht so aus :

#!/usr/bin/python3
# coding=utf-8
import re
def PyFindStructureInString(SuchStr, text, StartPos=1):
    hlp = re.search(SuchStr, text[StartPos:])
    if hlp == None:
        return "",0,0
    return hlp.group()

Leider habe ich im Internet dazu nichts gefunden. Es geht mir um einen grundsätzliche Möglichkeit vom Aufruf von Python-Routinen, nicht um die hier als Beispiel dargestellte Lösung einer Suchfunktion mit “regulärem Ausdruck”

Hier bitte Fragen auf Deutsch stellen - zur Englisch sprechenden Community geht’s hier lang.

Danke für den Hinweis - hab es entsprechend korrigiert. Leider ohne einen Hinweis, wo ich weitersuchen könnte.

Hallo

Du kannst doch gleich komplett auf python umsteigen, dann erübrigt sich die Frage …

ich hab leider an der falschen Stelle auf Antworten geklickt … die Antwort davor war eigentlich als Antwort auf deinen Beitrag gemeint. … SORRY

Danke für deine Antwort … Generell gebe ich dir recht …

NUR - überfordert mich das im Moment - dafür benötige ich Zeit …

und ich habe eine größere Anwertung in Basic und wollte die Funktionalitäten schrittweise mit Python ausprobieren und die Unterschiede nachvollziehen(verstehen). Jetzt erst einmal mit der BeispielRoutine.

Ich bin inzwischen HIER fündig geworden. Leider verstehe ich noch nicht, wo/wie ich die ÜbergabeParameter einbauen kann bzw das Ergebnis zurückbekomme.

ScriptForge.Session.ExecuteBasicScript() method

Der gemischte Code wird aber noch komplizierter … Du musst bei jedem Parameter herausfinden, ob die andere Seite dasselbe versteht, also wirklich derselbe Datentyp verwendet wird. Pythons Verwaltung des encodings bei Strings hat keine Entsprechung in BASIC etc.

Wenn es sein muss, nimm die ScriptForge-Bibliotheken und tausche so wenig Parameter wie möglich aus. Wenn Basic und Python abwechselnd an einem Dokument werkeln kannst Du das Dokument als gemeinsamen Speicher ansehen und einzelne Besrbeitungsschritte jewils auf dem Dokument arbeiten lassen.

Ohne ScriptForge musst Du für jeden Aufruf mit Parametern diese in ein Array verpacken und hinterher wieder auswerten. Beim HelloWorld-Beispiel in der von Dir angegebenen Stelle wird eben nur ein leeres ARRAY() übergeben.

Beschäftige Dich ein Wochenende lang intensiv mit http://cito.github.io/byte_of_python/ (Deutsch) und Du wirst Basic nicht mehr vermissen. Nach den ersten Kapiteln wirst Du genug Python können, um Basic zu ersetzen. Im Kontext von LO macros heißt das, dass Du mit Routinen, Schleifen, Verzweigungen, Tuples, Lists (Arrays) und UNO-Objekten ähnlich umgehen kannst wie mit Basic, ohne jetzt in die Tiefen der objektorientierten Python-Programmierung einsteigen zu müssen.
Installiere die Erweiterungen MRI und APSO, suche Dir irgendeinen Texteditor mit Syntax-Highlighting (je simpler desto besser), starte mit neuen Python-Kenntnissen aus dem Tutorial und los gehts mit doc = XSCRIPCONTEXT.getDocument(). Aber erst das Tutorial ohne Office suite durcharbeiten!

1 Like

Ich sehe gerade das ist von 2008 und somit für Python2, das würde ich heute nicht mehr empfehlen!!

Ja stimmt. Ein Bookmark aus einer uralten Linksammlung. Release Release v239134197cc453397b0540fa051392af6b47f9f3 · swaroopch/byte-of-python · GitHub ist die letzte englische Version vom Januar 22. Es fehlt wohl nach all den Jahren ein deutscher Übersetzer.
Wenn ich die ersten Kapitel der alten deutsche Version nochmal durchscrolle, dann gibt es keinen expliziten Datentyp “Unicode” mehr. Alles ist Unicode. Und statt print vari muss mann jetzt print(var) sagen. Ansonsten sind die Basics soweit gleich geblieben. Die Unterschiede auf die man sonst noch so stoßen mag kann man nachlesen. Bisher laufen auch alle meine Makros mit OpenOffice und LibreOffice also Python2 und Python3.

@Villeroy + @karolus: Vielen Dank für eure LInks und Hinweise.

Nun war ich leider schon länger nicht mehr hier … bin leider anderweitig sehr beansprucht …

Vorab:
Python (2 oder3) als Sprache ist mir ganz gut bekannt und ich habe damit schon diverse Progrämmchen geschrieben - also Routinen, Schleifen, Verzweigungen, Tuples, Lists (Arrays) kenne. Schwieriger wird es schon mit UNO-Objekten … das hatte ich noch nie in Verwendung. Vermutlich liegt genau hier mein Denk- / Wissensloch. UND… Programmieren ist bei mir Hilfsmittel zum Lösen anderer Aufgaben und hat - neben dem Vergügensfaktor - eher eine untergeordnete Priorität … LEIDER!

Was ich suche:
ist die Koppelung mit LibreOffice … sprich, dass ich aus einem Sheet heraus direkt eine Python-Routine/ function starten/aufrufen kann - im Prinzip so ähnlich wie derzeit mit Basic.

kleines Beispiel:
ich suche nach einer Function die ein SUCHEN(…) “von hinten” (xte Fundstelle) ermöglicht…
also irgend etwas wie REVSUCHEN(…)

der Auslöser ist:
Die Auswertungsaufgaben sind klar und wurden schon vor vielen Jahren per Basic (so in etwa) umgesetzt. Da nun eine Anpassung/Korrektur der eigentlichen Auswertungen ansteht wollte ich es nach Python portieren um dort bestehende Fehler zu beheben und die neue Funktionalitäten einzubauen.

Im Moment hab ich einfach nicht die Zeit um mich damit tiefer zu befassen - also wird mit Basic “gebastelt” …
aber für die zukünftigen Aufgaben würde ich lieber Python3 nutzen …

Jedenfalls VIELEN DANK für die Hinweise und Hilfestellungen…
WÜnsch euch einen schönen Sonntag

Also, was ist jetzt der Grund warum Du in Basic basteln musst obwohl Du Python kannst? Ich verstehe es beim besten Willen nicht. Ja, es ist ein Problem, dass Add-In-Funktionen für Calc mehr als nur den Quellcode erfordern, aber das ist erlernbar und damit lösbar. Hat man es einmal hinbekommen, ist es beim zweiten Mal gar nicht mehr so schlimm.
Die Version von REVSUCHEN gibt es schon. [Calc][oxt] A function for all python string methods (View topic) • Apache OpenOffice Community Forum
Das ist KEIN Makro. Das ist ein richtiges Add-In für Calc.

Der Vollständigkeit halber: Calc/Add-In/Python How-To - Apache OpenOffice Wiki

Beim Herumspielen mit PYSTRING(“rfind”,A1;B1;C1;D1) wird Dir vielleicht aufgefallen sein, dass diese maximal einfache Implementierung Probleme mit optionalen Parametern hat wenn sie auf leere Zellen verweisen. Mir ist es jedenfalls aufgefallen, dass es nicht funktioniert wenn in diesem Beispiel die Positionsparameter C1 und D1 leer sind.
Wenn man der Funktion alle Argumente gibt, dann funktioniert es richtig:

=PYSTRING("rfind";A1;B1;WENN(N(C1);C1;1);WENN(N(D1);D1;LÄNGE(A1)))