Innhold

# Opprette Python-skript med ScriptForge

## Forskjeller mellom Basic og Python

ScriptForge-biblioteket er tilgjengelig både for Basic og Python. De fleste tjenester, metoder og egenskaper fungerer identisk i begge programmeringsspråkene. Men på grunn av forskjeller i hvordan hvert språk fungerer, må ScriptForge-brukere være klar over noen egenskaper ved biblioteket når de bruker Python:

- Metoder og egenskapsnavn: I Python kan alle metoder og egenskaper brukes i små bokstaver, ProperCased eller camelCased-formater.

- Argumenter: Alle nøkkelordargumenter som sendes videre til metoder er skrevet med små bokstaver.

- Datoer: Alle datoobjekter sendes og returneres som datetime.datetime opprinnelige Python-objekter.

- Arrays: Endimensjonale matriser sendes og returneres som tupler (som er et uforanderlig objekt). Todimensjonale matriser sendes og returneres som tupler av tupler.

- Ingen: Pythons Ingen søkeord tilsvarer Basics Null, Tom eller Ingenting.

- UNO-objekter: Alle UNO-strukturer utveksles mellom Basic og Python uten endringer.

- Feilsøking: Når det oppstår en feil i Python-skript som bruker ScriptForge, viser feilmeldingen fra Python-utførelsesstakken linjen med kode som utløste feilen. I Basic viser ikke feilmeldinger denne informasjonen.

Besøk LibreOffice Python Scripts Hjelp for mer informasjon om Python-skripting med LibreOffice.

## Redigering av Python-skript i IDE-er

Python-skrivingstips - relatert til ScriptForge-tjenester offentlige metoder og egenskaper - kan fås fra IDE-er som støtter en slik funksjon. Visuelt, mens du redigerer et brukerskript:

- ved å sveve over en objektforekomst, en metode eller en egenskap vises dens detaljerte beskrivelse.

- et "." etter en objektforekomst viser en rullegardinboks som viser alle tilgjengelige grensesnitt.

- parentes etter et metodenavn starter kodefullføring ved å vise argumentene.

Skrivetips vises når du redigerer metoder og egenskaper med store bokstaver.

## Kjører Python-skript i LibreOffice

Avhengig av hva du har tenkt å oppnå, kan du velge en av følgende metoder for å kjøre Python-skript i LibreOffice:

- Kjør skript i den gjeldende LibreOffice-prosessen: Python-skript kjøres fra LibreOffice-prosessen ved å bruke Verktøy - Makroer - Kjør makro-menyen eller APSO-utvidelsen for å kalle brukerskript som er lagret i Python-skriptmappen. Du kan også bruke APSO Python-skallet til å kjøre Python-skript interaktivt.

- Kjør skript separat fra LibreOffice-prosessen: Python-skript kjøres fra en ekstern prosess som kobler seg til en pågående LibreOffice-prosess ved hjelp av en pipe eller en socket.

Hvis du planlegger å kjøre skript fra innsiden av LibreOffice-prosessen, anbefales det å installere APSO (Alternative Script Organizer for Python)-utvidelsen. For å utvikle Python-skript utenfra LibreOffice kan du imidlertid velge din foretrukne Python IDE.

### Kjøre skript fra innsiden av LibreOffice-prosessen

#### Bruk av APSO-utvidelsen

Den enkleste måten å komme i gang med Python-skripting i LibreOffice er å installere APSO-utvidelsen. Etter at du har installert den, åpner du en hvilken som helst LibreOffice-komponent og går til Verktøy - Makroer - Organiser Python-skript.

I hovedvinduet til APSO går du til Meny - Python Shell.

Alternativt kan du åpne APSO ved å bruke standardsnarveien Alt + Shift + F11.

Nå kan du begynne å skrive Python-kommandoer, og skallet vil skrive ut tilsvarende utdata etter at hver kodelinje er utført.

For å begynne å bruke ScriptForge-biblioteket, må du importere CreateScriptService-metoden, som du bruker for å få tilgang til tjenestene som tilbys av biblioteket. Eksemplet nedenfor bruker Basic-tjenesten til å vise en meldingsboks.

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

For å kjøre eksemplet ovenfor, skriv inn hver linje i Python-skallet, én etter én, og trykk Enter-tasten etter at du har skrevet inn hver linje med kode.

Nå kan du begynne å kjøre Python-kommandoer ved hjelp av hvilken som helst av ScriptForge-tjenestene. For eksempel bruker kodestykket nedenfor UI-tjenesten til å opprette et tomt Writer-dokument.

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

#### Opprette Python-skriptfiler

Du kan opprette dine egne Python-filer og redigere dem med din foretrukne teksteditor. Senere kan du kalle dem fra en hvilken som helst LibreOffice-komponent.

Det første trinnet er å finne ut hvor brukerskriptene dine er lagret. For å gjøre dette, se hjelpesiden for Organisering og plassering av Python-skript.

Nå kan du opprette en tekstfil i Python-brukerskriptmappen din, for eksempel my_script.py, og begynne å skrive skriptene dine.

Neste er et enkelt eksempel som henter den numeriske verdien fra en Calc-celle og øker den med 1. Bare skriv inn følgende kode i my_script.py-filen.

        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 eksemplet oppretter funksjonen increment_cell. Merk at g_exportedScripts er en tuppel som forteller hvilke funksjoner som skal vises i LibreOffice som brukerskript.

Slik kjører du dette skriptet fra et Calc-dokument:

1. Opprett eller åpne en Calc-fil.

2. Skriv inn en numerisk verdi i celle «A1» i gjeldende ark.

3. Gå til Verktøy - Makroer - Kjør makroer.

4. Velg Mine makroer - mitt_skript i bibliotekvelgeren. Velg deretter funksjonen inkrement_celle under listen Makronavn.

5. Klikk på Kjør. Merk at verdien i celle «A1» ble økt med 1.

Du kan også bruke APSO til å kjøre Python-skript på en lignende måte:

1. Åpne først APSO ved å gå til Verktøy - Makroer - Organiser Python-skript.

2. I makrolisten navigerer du til Mine makroer - mitt_skript - økningscelle.

3. Klikk på Utfør.

### Kjøre skript separat fra LibreOffice-prosessen

#### Bestemme installasjonsstien

Det første steget for å kjøre skript fra en separat prosess er å finne mappen der LibreOffice er installert. Det finnes flere måter å gjøre det på, men ScriptForge gir en rask måte å identifisere installasjonsstien din. For å gjøre det, åpne APSOs Python-skall og skriv:

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

Utdataene fra koden ovenfor er basiskatalogen der LibreOffice er installert. Nå må du legge til undermappen «program» i den resulterende banen. Dette er basismappen du skal kjøre Python-skript fra fra en separat prosess.

La oss for eksempel si at du får /usr/lib/libreoffice/ som resultat av å kjøre Python-koden ovenfor. Da må du vurdere /usr/lib/libreoffice/program som banen for å kjøre Python-skriptene dine.

#### Start LibreOffice med pipe- eller socket-innstillinger

For å kjøre Python-skript fra en separat prosess, må du starte LibreOffice med noen ekstra alternativer som angir pipe-navnet eller vertsnavnet og porten som den eksterne prosessen skal kommunisere med LibreOffice-komponentprosessen gjennom.

Åpne kommandolinjen i operativsystemet, naviger til programmappen i installasjonsmappen for LibreOffice og skriv inn enten:

På Linux eller macOS:

libreoffice --accept='pipe,name=aPipeName;urp;'

På Windows:

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

som en Flatpak:

flatpak run org.libreOffice.LibreOffice accept='socket,host=localhost,port=2021;urp;'

Begge kommandoene ovenfor vil starte LibreOffice med en åpen kommunikasjonskanal slik at andre prosesser kan utveksle meldinger med den.

Merk at det forrige eksemplet åpner LibreOffice startsenter. Hvis du vil åpne en bestemt komponent, for eksempel Writer, kan du legge til --writer-flagget til kommandoen, som følger.

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

Legg merke til parameterne name, eller host og port, som i dette eksemplet er henholdsvis aPipeName, eller localhost og 2021.

#### Kjøre et eksternt Python-skall

Start Python-skallet fra program-mappen i installasjonsstien for LibreOffice. Følg trinnene ovenfor for å lære hvordan du finner installasjonsstien.

På Linux eller macOS:

$ cd /usr/lib/libreoffice/program

$ python

På Windows:

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

$ python.exe

Dette åpner Python-skallet, og du kan nå begynne å skrive kommandoer som skal utføres av LibreOffice. Men først må du sette opp pipe- eller socket-tilkoblingen. ScriptForge()-setningen nedenfor må gå foran det aller første kallet til CreateScriptService().

Kjør enten:

       fra scriptforge import ScriptForge, CreateScriptService
       ScriptForge(pipe='aPipeName')

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

Les avsnittet Angi PYTHONPATH nedenfor i tilfelle feil ved import av scriptforge.py eller uno.py.

Den andre kodelinjen ovenfor definerer innstillingene pipe eller host og port slik at Python-skallet kan kommunisere med en pågående LibreOffice-prosess som er åpnet med de samme pipe- eller socket-innstillingene.

Nå kan du kjøre andre Python-kommandoer, og de vil kunne kommunisere med LibreOffice-prosessen. For eksempel:

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

#### Sette inn PYTHONPATH

Avhengig av konfigurasjonen av operativsystemet ditt, må du angi miljøvariabelen PYTHONPATH for å importere scriptforge.py-biblioteket, som igjen krever import av uno.py-biblioteket.

Bruk operativsystemets filsøkverktøy til å finne katalogen der begge disse filene befinner seg.

For eksempel, på en standard Ubuntu-installasjon kan begge filene være plassert på:

- scriptforge.py: Ligger i /usr/lib/libreoffice/program

- uno.py: Ligger i /usr/lib/python3/dist-packages

I dette tilfellet, angi miljøvariabelen PYTHONPATH som følger før du starter Python-tolkeren:

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

Plasseringen av disse filene vil være forskjellig for hvert operativsystem og LibreOffice-installasjonsmetode.

Lignende emner

ScriptForge-biblioteket

LibreOffice Python Skript Hjelp

Starter LibreOffice programvare med parametere

Supporter oss!