Python oder Basic für Makros in .ods-Dateien nutzen?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

housefreund
******
Beiträge: 603
Registriert: Do, 03.01.2008 23:23

Python oder Basic für Makros in .ods-Dateien nutzen?

Beitrag von housefreund »

Hallo miteinander.

Kurze Version

Makro-Anfänger hier, was Basic oder Python in LO Calc angeht. Ich habe schon vor Jahren mal nach der Thematik geforscht, aber das führte leiderauch zu einem produktiven/guten Ergebnis.

Ich möchte herausfinden, was das beste „Excel & VBA“-Äquivalent für „.ods“-Dateien ist, d. h. Dateien aus/in/für LibreOffice Calc und weitere Nutzung da drin.

Da sich nach einem halben Tag Googlen und viel Herumlesen etwas der Kopf dreht, frage ich mal: habt Ihr da ggf. Ratschläge oder richtungsweisende Tipps, wie ich da für eine langfristig sinnvolle Vorgehensweise weitermachen könnte/sollte?


Lange Version

Durch meine Arbeit verfüge ich wohl über mittlere bis sehr gute Kenntnisse in VBA mit Excel und würde gerne versuchen, mit LO Calc und Makros auf meinem Privatrechner (wo ich LO Calc praktisch 99 % der Zeit unter Linux verwende) ein ähnliches Niveau zu erreichen bzw. den Weg überhaupt mal anfangen zu gehen. Aber mir dreht sich gerade der Kopf.

Im Allgemeinen gibt es viiiiiiiele, viele Hinweise/Ergebnise zur Verwendung von Python in LO Calc mit openpxl... was dann für .xlsx-Dateien benutzt wird. Ich will aber wie gesagt ottonormale .ods-Dateien bearbeiten.

Was ich bisher herausgefunden habe:
  1. Auf der offiziellen Hilfeseite gibt es eine Seite speziell für Python-Skripte (aber für LO-Version 6.3): https://help.libreoffice.org/6.3/en-US/ ... bPAR=BASIC
  2. Es gibt auch ScriptForge, das vielversprechend erscheint: https://help.libreoffice.org/7.2/en-US/ ... bPAR=BASIC oder https://www.youtube.com /watch?v=pHlLdyJz2sE
  3. Und es gibt einige Anleitungen zum Schreiben von Skripten/Code in Basic für LibreOffice, von denen einige umfangreich sind, andere scheinbar eher kurz und knackig. Einige sind älter und so ca. 8-12 Jahre alt (OpenOffice.org Makro-Kochbuch, Erfahrungsbericht LibreOffice AOO Basic, OOME_3_0_deutsch.pdf). Die offizielle Hilfeseite scheint an der Stelle die aktuellste Quelle zu sein: https://help.libreoffice.org/latest/en- ... tml?DbPAR= BERECHNEN
  4. Neben der Hilfe-Seite https://help.libreoffice.org gibt es auch eine Doku-Seite https://documentation.libreoffice.org/, die zu anderen Makro-Anleitungen führt: https://documentation.libreoffice.org/e ... ion/macro/
Ein zielführender Weg ist mir nicht ganz klar. Sollte man Basic oder Python verwenden?

Ist dies hier beispielsweise mit Python (in einer LO Calc-Datei) möglich?
  1. Kopieren des Inhalts (also der Werte) aus dem Bereich „C4:D91“ aus dem Blatt „BEISPIEL“
  2. Ermitteln der Zeilennummer der ersten leeren Zelle in Spalte C im Blatt „ASDF“, z. B. ... Zeile 6.
  3. Einfügen der kopierten Werte in C6 im Blatt ASDF.
  4. Ein „Ja“ in E4:E91 im Blatt „BEISPIEL“ setzen?
Zuletzt geändert von housefreund am Mo, 04.09.2023 12:34, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

Re: Python oder Basic für Makros in .ods-Dateien nutzen?

Beitrag von Karolus »

Hallo

Ich fang mal von hinten an:

Code: Alles auswählen

4. = 3. = 2. = 1. = True    # das wirft natürlich einen SyntaxError, daher:
_4 = _3 = _2 =_1 = True  # das ist gültiger Pythoncode
( auf deutsch: ein klares Ja auf alle vier Fragen )

Die offiziellen Hilfeseiten auf LO sind im Bezug auf python nicht so wirklich nützlich, insbesondere die Links auf irgendwelche ScriptForge-services die man doch bitteschön jetzt und gleich als python-Programmierer benutzen soll sind eher kontraproduktiv.
Die ganzen älteren Anleitungen sind eigentlich ausschliesslich auf Basic fokussiert, aber überall da wo es um API-zugriffe geht, relativ einfach nach python zu übersetzen. ( IMHO wesentlich leichter als das prototypische VBA-geschwurbel (welches hier und überall aufschlägt ) nach vernünftigen Basic|python zu portieren. )

IMHO: mittel- bis langfristig bist du besser bedient, wenn du zu ALLERERST die Grundlagen zu python zb. hier das Tutorial durcharbeitest. Wenn du das geschafft hast, kannst du dich auch langsam an die Libreoffice-Api rantasten.
(Ich weiss die Lernkurve ist insbesondere für VBA-geschädigte anfangs furchtbar steil, aber bist du erstmal oben, kannst du mit python auch dann noch etwas machen wenn die Zombie-sprachen aus dem letzen Jahrhundert (VBA|StarBasic) endlich mal ihr natürliches Ende finden.)

Bei allen Fragen, insbesondere zu python darfst du gerne die Suchfunktionen hier oder hier oder hier auch mit dem Stichwort karolus benutzen.

und eine (von etlichen Möglichkeiten) vollständige Antwort zu den Beispielsfragen:

Code: Alles auswählen

def example(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    source = doc.Sheets["BEISPIEL"]
    data = source["C4:D91"].DataArray #1.
    source["E4:E91"].DataArray = [["ja"],] * len(data) # 4.
    target = doc.Sheets["ASDF"]
    cursor = target.createCursorByRange(sheet["C:C"]) # 2.
    query=cursor.queryEmptyCells() # 2.
    cursor = sheet.createCursorByRange(query[0]) # 2.
    cursor.collapseToSize(len(data[0]), len(data))
    cursor.DataArray = data # 3.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Hiker
******
Beiträge: 591
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Python oder Basic für Makros in .ods-Dateien nutzen?

Beitrag von Hiker »

housefreund hat geschrieben: So, 03.09.2023 21:06 ...
Ein zielführender Weg ist mir nicht ganz klar. Sollte man Basic oder Python verwenden?
...
Die Frage ist was Dein Ziel ist...

Normalerweise empfehle ich erstmal bei dem zu bleiben, was man kennt, wenn ein Problem kurzfristig gelöst werden soll.

Bei LibreOffice gehe ich davon aus, dass wir künftig mehr Python sehen werden, aber die meisten Beispiele sind halt in Basic, weil es seit schon "ewig lange" integriert ist.

Die meisten meiner Macros sind in Basic, weil die Sprache ziemlich egal ist, wenn die SUB nur 10 bis 20 Zeilen hat, in denen ein paar Parameter an API-Funktionen übergeben werden oder ein SQL-Befehl zusammengesetzt wird. Das sieht in jeder Sprache ähnlich aus (und deshalb reicht mir dafür auch die sonst recht dürftige BASIC-IDE.)
.
Sobald man einmal die Einrichtungshürde für Python/APSO/geany oder eine andere IDE geschafft hat, macht auch das nur wenig Unterschiede. Das ist dank APSO schon einfacher als früher.

Die Vorteile von python nutze ich mehr in externen Programmen aus, wo ich auch problemlos Python um libraries erweitern kann, ohne mir um Updates von LibreOffice Sorgen zu machen.

Im Kopf behalten sollte man, dass man LibreOffice auch von einem externen Python aus steuern kann und dies z.B. auch aus Jupyter Notebooks heraus.

Als VBA-Umsteiger musst Du im wesentlichen erstmal das API von LibreOffice (UNO) lernen, da sich die Ansätze doch stark unterscheiden. Ob Scriptforge dabei hilfreich ist wird sich noch zeigen...

J.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Antworten