In Python-scripts gebruik maken van ScriptForge

Inhoud
Index 🔎︎

# Python-scripts met ScriptForge

## Verschillen tussen Basic en Python

De bibliotheek ScriptForge is zowel in Basic als in Python beschikbaar. De meeste services, methoden en eigenschappen werken in beide programmeertalen gelijk. Maar, er zijn natuurlijk wel wat verschillen hoe de talen werken. Als u in Python ScriptForge gebruikt, let dan op het volgende:

- Namen van methoden en eigenschappen: In Python, kunnen deze namen de opmaken lowercased, ProperCased en camelCased hebben.

- Argumenten: Alle sleutelwoord argumenten voor methoden zijn met kleine letters.

- Datums: Alle objecten die een datum zijn worden doorgegeven en ontvangen als datetime.datetime Python-objecten.

- Matrices: Een eendimensionale matrix wordt doorgegeven en ontvangen als een tuple (dat is een object dat niet te wijzigen is). Een tweedimensionale matrix als een tuple van tuples.

- None: Het Python sleutelwoord None is gelijkwaardig aan Basic's Null, Empty en Nothing.

- UNO-objecten: Alle UNO-structuren zijn tussen Python en Basic uitwisselbaar.

- Debuggen: Als er in een Python-script, dat ScriptForge gebruikt, een fout optreedt dan is er op de stack een foutboodschap beschikbaar met de regel in de code waar de fout is opgetreden. In Basic is dit regelnummer niet beschikbaar.

Meer informatie vind u op Hulp bij LibreOfficeDev Python-scripts over het gebruik van Python scripts in LibreOfficeDev.

## Uitvoeren van Python-scripts in LibreOfficeDev

Afhankelijk van wat u wilt bereiken, kunt u kiezen uit de volgende aanpakken om Python-scripts in LibreOfficeDev uit te voeren:

- Scripts uitvoeren binnen het huidige proces LibreOfficeDev: Python-scripts worden uitgevoerd binnen het LibreOfficeDev proces door Extra - Macro's - Macro uitvoeren te kiezen of door de extensie APSO te gebruiken om een gebruikersscript in de map met Python-scripts aan te roepen. U kunt ook de APSO Python-shell gebruiken om interactief Python-scripts uit te voeren.

- Scripts kunnen ook buiten het LibreOfficeDev proces worden uitgevoerd: Python-scripts worden uitgevoerd door een extern proces dat verbinding maakt met het lopende LibreOfficeDev proces via een socket.

Indien u scripts binnen het LibreOfficeDev proces wilt gaan uitvoeren, dan bevelen wij aan om de extensie APSO (Alternative Script Organizer for Python) te installeren. Als u echter uw Python-scripts buiten LibreOfficeDev wilt gaan ontwerpen, kies dan uw favoriete Python IDE.

## Scripts binnen het proces LibreOfficeDev uitvoeren

### De extensie APSO

De gemakkelijkste manier om met Python-scripts in LibreOfficeDev te beginnen is het gaan werken met de extensie APSO. Ga, na het installeren, in een LibreOfficeDev component naar Extra - Macro's - Python-scripts beheren.

Ga in het hoofdscherm van APSO naar Menu - Python-shell.

U kunt APSO ook openen met de sneltoets Alt + Shift + F11.

Nu kunt u beginnen met het invoeren van Python-commando's, in de shell wordt dan na uitvoering de uitvoer getoond.

Voordat u de bibliotheek ScriptForge kunt gebruiken moet u eerst de methode CreateScriptService importeren, daarna kunt u via deze methode de services in de bibliotheek benaderen. In dit voorbeeld gebruiken we de service in Basic om een berichtvenster te tonen.

        from scriptforge import CreateScriptService
        bas = CreateScriptService("Basic")
        bas.MsgBox("Hello!")

Om dit in de Python-shell uit voeren moet u de tekst regel voor regel invoeren en elke regel afsluiten met de Enter-toets.

Nu kunt u beginnen met het uitvoeren van Python-commando's met gebruik van een van de services in ScriptForge. U kunt bijvoorbeeld met de code hieronder de service UI gebruiken om een Writer-document aan te maken.

        ui = CreateScriptService("UI")
        doc = ui.CreateDocument("Writer")

### Python-script bestanden aanmaken

U kunt uw eigen Python-bestanden aanmaken met uw favoriete tekstverwerker. U kunt ze dan later aanroepen in een van de LibreOfficeDev componenten.

De eerste stap is het bepalen waar de gebruikersscripts worden opgeslagen. Hier staat een uitleg.

U kunt nu een tekstbestand in uw Python map voor gebruikersscripts aanmaken, bijvoorbeeld sf_test.py en uw scripts gaan invoeren.

In het volgende eenvoudige voorbeeld verhogen we de numerieke waarde van een cel in Calc met 1. Plaats de volgende code in het bestand sf_test.py.

        from scriptforge import CreateScriptService
        doc = CreateScriptService("Calc")

        def increment_cell(args=None):
            value = doc.GetValue("A1")
            value += 1
            doc.SetValue("A1", value)

        g_exportedScripts = (increment_cell, )

Er is nu een functie increment_cell aangemaakt. De g_exportedScripts is een tuple dat aangeeft welke functies zullen worden getoond in LibreOfficeDev als gebruikersscripts.

Om dit script nu in een Calc-document uit te voeren:

1. Maak of open een Calc-document.

2. Vul in cel "A1" in het huidige blad een numerieke waarde in.

3. Ga naar Extra - Macro's - Macro uitvoeren .

4. Kies in de lijst met bibliotheken Mijn Macro's - sf_test. Kies vervolgens de functie increment_cell in de lijst Macronaam.

5. Klik op de knop Uitvoeren. Controleer of de waarde in cel "A1" met 1 is opgehoogd.

U kunt op een vergelijkbare manier APSO gebruiken om een Python-script uit te voeren:

1. Open eerst APSO via Extra - Macro's - Python-scripts beheren.

2. Ga in de lijst met macro's naar Mijn macro's - sf_test - increment_cell.

3. Klik op Uitvoeren.

## Scripts buiten het LibreOfficeDev proces uitvoeren

### Het installatiepad bepalen

De eerste stap om scripts los uit te voeren is het opzoeken in welke map LibreOfficeDev is geïnstalleerd. Dat kan op verschillende manieren, maar het installatiepad opzoeken kan heel snel via ScriptForge. Open de Python-shell van APSO en voer in:

        from scriptforge import CreateScriptService
        fs = CreateScriptService("FileSystem")
        fs.FileNaming = "SYS"
        inst_dir = fs.InstallFolder
        print(inst_dir)

De uitvoer van de bovenstaande code is de installatiemap van LibreOfficeDev. Voeg hieraan nog wel de submap "program" toe. Dit is dan de basismap om in een losstaand proces Python-scripts uit te voeren.

Een voorbeeld, als de uitvoer van de code /usr/lib/libreoffice/ was, dan is het benodigde pad dus /usr/lib/libreoffice/program.

### LibreOfficeDev starten met instellingen voor het socket

Om Python-scripts als een losstaand proces uit te voeren moet LibreOfficeDev worden gestart met twee aanvullende opties die de hostnaam en de poort aangeven die het externe proces gebruikt voor het communiceren met de LibreOfficeDev component.

Open het terminalvenster op uw computer, ga naar de installatiemap van LibreOfficeDev en voer in:

./soffice --accept='socket,host=localhost,port=2021;urp;'

Met bovenstaande commando wordt LibreOfficeDev gestart met een open communicatiekanaal, via dit kanaal kunnen andere processen berichten sturen.

In het voorbeeld wordt LibreOfficeDev geopend maar nog niet een specifieke component. Als u direct Writer wilt openen, voeg dan --writer toe aan het commando.

./soffice --writer --accept='socket,host=localhost,port=2021;urp;'

In dit commando worden met de parameters host en port dus de twee eerder genoemde aanvullende opties doorgegeven, de waarden zijn localhost en 2021.

### Een externe Python-shell uitvoeren

Open een Python-shell en ga naar de map program van de installatiemap van LibreOfficeDev. Voer de bovenstaande stappen uit om het installatiepad te bepalen.

Op Linux / Mac OS:

$ cd /usr/lib/libreoffice/program

$ python

Op Windows:

$ cd C:\Program Files\LibreOffice\program\

$ python.exe

De Python-shell is nu geopend en u kunt nu dus commando's invoeren en laten uitvoeren door LibreOfficeDev. Met het eerste commando moet u verbinding maken met het socket.

        from scriptforge import ScriptForge, CreateScriptService
        ScriptForge(hostname='localhost', port=2021)

Hierboven wordt de instelling van de host en de port gedaan zodat de Python-shell kan communiceren met het LibreOfficeDev proces dat geopend is met deze via deze socket.

Nu kunnen we echt aan de slag met wat u in LibreOfficeDev wilt laten doen. Bijvoorbeeld:

        ui = CreateScriptService("UI")
        bas = CreateScriptService("Basic")
        doc = ui.OpenDocument("~/Documents/myFile.ods")
        bas.MsgBox(doc.DocumentType)

Verwante onderwerpen

De ScriptForge bibliotheek

Hulp bij LibreOfficeDev Python-scripts

LibreOfficeDev-software starten met parameters