Laga Python-skript med ScriptForge

Skilnadar mellom Basic og Python

Biblioteket ScriptForge er tilgjengeleg for både Basic og Python. Dei fleste tenester, metodar og eigenskapar fungerer på same måte i begge programmeringsspråka. På grunn av skilnadar i korleis kvart av språka fungerer, må brukarane av ScriptForge vera klar over nokre av eigenskapane ved bruk av Python:

tip

Sjå Hjelp til LibreOfficeDev Python-skript for å sjå fleire opplysningar om bruk av Python-skript i LibreOfficeDev.


Redigera Python-skript i IDEs

Medan du redigerer eit brukarskript kan du få innskrivingstips for Python ‒ relateret til ScriptForge-tenester sine offentlege metodar og eigenskapar ‒ frå IDE-ar som støttar ein slik funksjon:

note

Det vert vist skrivetips med store bokstavar når du redigerar metodar og eigenskapar.


Køyra Pythonskript i LibreOfficeDev

Avhengig av kva du vil oppnå, kan du velja ein av desse måtane for å køyra Python-skript i LibreOfficeDev:

tip

Viss du køyrer skript inne frå LibreOfficeDev-prosessen, vert det tilrådd å installera utvidinga APSO (Alternative Script Organizer for Python). Viss du vil utvikla Python-skript utanfor LibreOfficeDev, kan du velja den Python-IDE-en du likar best.


Å køyra skript frå innføre LibreOfficeDev-prosessen

Med APSO-utvidinga

Den enklaste måten å koma i gang med Python-skripting i LibreOfficeDev, er å installera APSO-utvidinga. Når du har installert ho, opnar du kva LibreOfficeDev-komponent som helst og går til Verktøy → Makroar → Organiser Pythonskript.

I hovudvindauget for APSO går du til Meny → Python-skal.

tip

Du kan også opna APSO med standardsnarvegen Alt + Skift + F11.


No kan du skriva inn Python-kommandoar. Skalet vil skriva ut dei tilsvarande utdataa når kvar kodelinje er utført.

For å bruka biblioteket ScriptForge må du importera metoden CreateScriptService. Med denne har du tilgang til dei tenestene som biblioteket har. Eksempelet nedanfor brukar tenest Basic for å visa ein meldingsboks.


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

Viss du vil køyra eksempelet ovanfor, skriv du inn kvar linje i Python-skalet éi etter éi, og trykkjer Enter etter at du har skrive inn kvar kodelinje.

No kan du byrja å køyra Python-kommandoar ved hjelp av alle ScriptForge-tenestene. Kodesnutten nedanfor brukar for eksempel UI-tenesta til å laga eit tomt Writer-dokument.


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

Oppretta Python skriptfiler

Du kan laga dine eigne Python-filer og redigera dei med det tekstredigeringsprogrammet du likar best. Seinare kan du kalla dei opp frå kva LibreOfficeDev-komponent som helst.

Det første steget er å finna ut kvar brukarskripta er lagra. Sjå hjelpsidene Pythonskript, organisering og lokalisering.

Nå kan du oppretta ei tekstfil i Python-brukarskriptmappa, for eksempel sf_test.py og byrja å skriva skripta dine.

Det neste er eit enkelt eksempel som hentar talverdien frå ei Calc-celle og aukar denne med 1. Berre skriv inn denne koden i fila 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, )
  

Dette eksempelet opprettar funksjonen increment_cell. Merk at g_exportedScripts er ein tuple som fortel kva funksjonar som vert viste i LibreOfficeDev som brukar-skript.

Slik køyrer du dette skriptet frå eit Calc-dokument:

  1. Lag eller opna ei Calc-fil.

  2. Skriv inn nokre talverdiar i cella «A1» i det gjeldande arket.

  3. Gå til menyen Verktøy → Makroar → Køyr makro.

  4. Vel «Mine makroar» → «sf_test» i bibliotekveljaren. Vel så funksjonen increment_cell i lista Makronamn.

  5. Trykk på Run. Merk at verdien i cella «A1» vert auka med 1.

Du kan også bruka APSO for å køyra Python-skript på ein liknande måte:

  1. Opna først APSO ved å gå til Verktøy → Makroar → Organiser Python-skript.

  2. Naviger til Mine makroar → sf_test → increment_cell på makrolista .

  3. Trykk på Køyr.

Å køyra skript uavhengig av LibreOfficeDev-prosessen

Bestemma installasjonsstien

Det første steget for å køyra skript frå ein uavhengig prosess, finn du i mappa der LibreOfficeDev er installert. Det er fleire måtar å gjere dette på, men ScriptForge har ein rask måte å identifisera installasjonsstien på. Opna APSO sitt Python-skal og skriv:


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

Utdataa frå koden ovanfor er basismappa der LibreOfficeDev er installert. Nå må du leggja til «program»-undermappa i den resulterande stien. Dette er basismappa du vil køyra Python-skript frå i ein uavhengig prosess.

Gå for eksempel ut frå at du får /usr/lib/libreoffice/ som resultat av å køyra Python-koden ovanfor. Så får du vurdera om /usr/lib/libreoffice/program er den beste stien å køyra Python-skripta frå.

Start LibreOfficeDev med sokkel-instillingar

Viss du vil køyra Python-skript frå ein eigen prosess, må du starta LibreOfficeDev med nokre få tilleggsinnstillingar som spesifiserer vertsnamnet og porten som den eksterne prosessen skal kommunisera med komponentprosessen LibreOfficeDev gjennom.

Opna kommandolinja for operativsystemet, finn fram til programmappa i installasjonsmappa for LibreOfficeDev og skriv inn:

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

Kommandoen ovanfor startar LibreOfficeDev med ein kommunikasjonskanal open, slik at andre prosessar kan utveksla meldingar med han.

Legg merke til at det førre eksempelet opnar startsenteret for LibreOfficeDev. Viss du vil opna ein bestemt komponent, for eksempel Writer, kan du leggja til --writer-flagget i kommandoen som vist nedanfor.

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

Legg merkje til parametera host og port, som i dette eksempelet er localhost og 2021.

Køyra eit eksternt Python-skal

Opna Python-skalet frå mappa program i installasjonsstien for LibreOfficeDev. Følg stega ovanfor for å læra å finna installasjonsstien.

I Linux / Mac OS:

$ cd /usr/lib/libreoffice/program

$ python

I Windows:

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

$ python.exe

Dette opnar Python-skalet slik at du kan byrja å skriva inn kommandoar som skal køyrast av LibreOfficeDev. Men først må du setja opp sokkelkoplinga.


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

Les bolken Setja opp PYTHONPATH nedanfor i tilfelle feil ved import av scriptforge.py eller uno.py.


Den andre kodelinja ovanfor definerer innstillingane host og port slik at Python-skalet kan kommunisera med ein køyrande LibreOfficeDev-prosess som er opna med dei same sokkelinnstillingane.

No kan du køyra andre Python-kommandoar, og dei vil kunna kommunisera med LibreOfficeDev-prosessen. For eksempel:


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

Setja opp PYTHONPATH

Avhengig av korleis operativsystemet er sett opp, må du setja miljøvariabelen PYTHONPATH for å kunna importera scriptforge.py-biblioteket, som igjen krev import av uno.py-biblioteket.

Bruk filsøkingsverktøyet i operativsystemet for å finna mappa der begge desse filene er sette inn.

For eksempel i eit standard Ubuntu-oppsett kan begge filene vera i:

I dette tilfellet set du omgivnadsvariabelen PYTHONPATH som vist her ffør du opnar Python-tolkaren:

export PYTHONPATH=/usr/lib/libreoffice/program:/usr/lib/python3/dist-packages

note

Plasseringa av desse filene vil vera ulik for kvart operativsystem og LibreOfficeDev-installasjonsmetode.