Innhold
Innholdsliste 🔎︎

# Tillegg for programmering i LibreOffice Calc

Metoden for å utvide Calc med tillegg som er beskrevet i det følgende er utdatert. Grensesnittene er fortsatt gyldige og støttes for å sikre kompatibilitet med eksisterende tillegg, men for programmering av nye tillegg bør du bruke de nye API-funksjonene.

LibreOffice Calc kan utvides med tilleggsprogrammer, som er eksterne programmeringsmoduler som gir tilleggsfunksjoner for arbeid med regneark. Disse er oppført i Funksjonsveiviseren i kategorien Tillegg. Hvis du ønsker å programmere et tillegg selv, kan du lære her hvilke funksjoner som må eksporteres av delt bibliotek ekstern DLL slik at tillegget kan kobles til.

LibreOffice søker i tilleggsmappen definert i konfigurasjonen etter et passende delt bibliotek DLL. For å bli gjenkjent av LibreOffice, må delte biblioteket DLL ha visse egenskaper, som forklart i det følgende. Denne informasjonen lar deg programmere ditt eget tillegg for Funksjonsveiviser av LibreOffice Calc.

## Tilleggskonseptet

Hvert tilleggsbibliotek har flere funksjoner. Noen funksjoner brukes til administrative formål. Du kan velge nesten hvilket som helst navn for dine egne funksjoner. Imidlertid må de også følge visse regler angående parameteroverføring. De nøyaktige navne- og anropskonvensjonene varierer for ulike plattformer.

### Funksjoner til Delt bibliotek AddIn DLL

Som et minimum, de administrative funksjonene GetFunctionCount og GetFunctionData må eksistere. Ved hjelp av disse kan funksjonene samt parametertyper og returverdier bestemmes. Som returverdier støttes typene Double og String. Som parametere, i tillegg celleområdene Double Array, String Array link> og Cell Array støttes.

Parametre sendes ved hjelp av referanser. Derfor er en endring av disse verdiene i utgangspunktet mulig. Dette støttes imidlertid ikke i LibreOffice Calc fordi det ikke gir mening i regneark.

Biblioteker kan lastes inn på nytt under kjøring, og innholdet kan analyseres av de administrative funksjonene. For hver funksjon er det tilgjengelig informasjon om antall og type parametere, interne og eksterne funksjonsnavn og et administrativt nummer.

Funksjonene kalles synkront og returnerer resultatene umiddelbart. Sanntidsfunksjoner (asynkrone funksjoner) er også mulig; de er imidlertid ikke forklart i detalj på grunn av deres kompleksitet.

## Generell informasjon om grensesnittet

Maksimalt antall parametere i en tilleggsfunksjon knyttet til LibreOffice Calc er 16: én returverdi og maksimalt 15 funksjonsinndataparametere.

Datatypene angis som følger:

Datatyper | Definisjon
--- | ---
CALLTYPE | Under Windows: FAR PASCAL (far pascal) Annet: standard (operativsystemspesifik standard)
USHORT | 2 byte usignert heltall
DOUBLE | 8-byte platformsavhengig format
Paramtype | Plattformavhengig som int PTR_DOUBLE =0 peker på en dobbel PTR_STRING =1 peker på en nullterminert streng PTR_DOUBLE_ARR =2 peker på en dobbel matrise PTR_STRING_ARR =3 peker på en strengmatrise PTR_CELL_ARR =4 peker på en cellematrise NONE=5

## Delt bibliotek DLL-funksjoner

Nedenfor finner du en beskrivelse av disse funksjonene, som kalles på Delt bibliotek ekstern DLL .

For alle Delt bibliotek DLL-funksjoner gjelder følgende:

void CALLTYPE fn(out, in1, in2, ...)

Output: Resultatverdi

Inndata: Et hvilket som helst antall typer (double&, char*, double*, char**, celleområde), der celleområdet er en rekke typer dobbel matrise, strengmatrise eller cellematrise.

### GetFunctionCount()

Returnerer antall funksjoner uten administrasjonsfunksjonene til referanseparameteren. Hver funksjon har et unikt tall mellom 0 og nCount-1. Dette nummeret vil være nødvendig for GetFunctionData og GetParameterDescription fungerer senere.

Syntaks

void CALLTYPE GetFunctionCount(USHORT& nCount)

Parameter

USHORT &nCount:

Utdata: Referanse til en variabel, som skal inneholde antall tilleggsfunksjoner. For eksempel: Hvis tillegget gir 5 funksjoner for LibreOffice Calc, så nCount=5.

### GetFunctionData()

Bestemmer all viktig informasjon om en tilføyelsesfunksjon.

Syntaks

void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)

Parameter

USHORT& nNo:

Input: Funksjonsnummer mellom 0 og nCount-1, inkludert.

char* pFuncName:

Utgang: Funksjonsnavnet sett av programmereren, slik det heter i Delt bibliotek DLL. Dette navnet bestemmer ikke navnet som brukes i Funksjonsveiviseren.

USHORT& nParamCount:

Utgang: Antall parametere i tilleggsfunksjonen. Dette tallet må være større enn 0, fordi det alltid er en resultatverdi; maksimumsverdien er 16.

Paramtype* peType:

Utdata: Peker til en matrise med nøyaktig 16 variabler av typen Paramtype. De første nParamCount-oppføringene er fylt med passende parametertype.

char* pInternalName:

Utdata: Funksjonsnavnet sett av brukeren, slik det vises i Funksjonsveiviseren. Kan inneholde omlyder.

Parameterne pFuncName og pInternalName er char arrays, som er implementert med størrelse 256 i LibreOffice Calc.

### GetParameterDescription()

Gir en kort beskrivelse av tilleggsfunksjonen og dens parametere. Som et alternativ kan denne funksjonen brukes til å vise en funksjon og parameterbeskrivelse i Funksjonsveiviseren.

Syntaks

ugyldig CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)

Parameter

USHORT& nNo:

Input: Nummer på funksjonen i biblioteket; mellom 0 og nCount-1.

USHORT& nParam:

Input: Indikerer, for hvilken parameter beskrivelsen er gitt; parametere starter på 1. Hvis nParam er 0, skal selve beskrivelsen gis i pDesc; i dette tilfellet har ikke pName noen betydning.

char* pName:

Utdata: Tar opp parameternavnet eller -typen, for eksempel ordet "Number" eller "String" eller "Date", og så videre. Implementert i LibreOffice Calc som char[256].

char* pDesc:

Utdata: Tar opp beskrivelsen av parameteren, for eksempel "Verdi som universet skal beregnes til." Implementert i LibreOffice Calc som char[256].

pName og pDesc er char matriser; implementert i LibreOffice Calc med størrelse 256. Vær oppmerksom på at plassen som er tilgjengelig i Funksjonsveiviseren er begrenset og at de 256 tegnene ikke kan brukes fullt ut.

## Celleområder

Følgende tabeller inneholder informasjon om hvilke datastrukturer som må leveres av en ekstern programmodul for å passere celleområder. LibreOffice Calc skiller mellom tre forskjellige matriser, avhengig av datatypen.

### Dobbelt matrise

Som en parameter kan et celleområde med verdier av typen Number/Double sendes. En dobbel matrise i LibreOffice Calc er definert som følger:

Offset | Navn | Beskrivelse
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
2 | Rad 1 | Radnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
4 | Tabell 1 | Tabellnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
8 | Rad 2 | Radnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
10 | Tabell 2 | Tabellnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
12 | Tell | Antallet av følgende elementer. Tomme celler telles eller passeres ikke.
14 | uKolonne | Kolonnenummer. Nummerering begynner ved 0.
16 | Rad | Radnummer. Nummerering begynner ved 0.
18 | Tabell 1 | Radnummer. Nummerering begynner ved 0.
20 | Feil | Feilnummer, der verdien 0 er definert som "ingen feil." Hvis elementet kommer fra en formelcelle, bestemmes feilverdien av formelen.
22 | Verdi | 8 byte IEEE-variabel av typen dobbel/flytende komma
30 | ... | Neste element

### Strengematrise

Et celleområde som inneholder verdier av datatypen Tekst og sendes som en strengmatrise. En strengmatrise i LibreOffice Calc er definert som følger:

Offset | Navn | Beskrivelse
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
2 | Rad 1 | Radnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
4 | Tabell 1 | Tabellnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
8 | Rad 2 | Radnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
10 | Tabell 2 | Tabellnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
12 | Tell | Antall av følgende elementer. Tomme celler telles eller passeres ikke.
14 | uKolonne | Kolonnenummer. Nummerering begynner ved 0.
16 | Rad | Radnummer. Nummerering begynner ved 0.
18 | Tabell 1 | Radnummer. Nummerering begynner ved 0.
20 | Feil | Feilnummer, der verdien 0 er definert som "ingen feil." Hvis elementet kommer fra en formelcelle, bestemmes feilverdien av formelen.
22 | Len | Lengden på følgende streng, inkludert avsluttende nullbyte. Hvis lengden inkludert avsluttende nullbyte er lik en oddeverdi, legges en andre nullbyte til strengen slik at en partallsverdi oppnås. Derfor beregnes Len ved å bruke ((StrLen+2)&~1).
24 | Streng | Streng med avsluttende null byte
24+Len | ... | Neste element

### Cellematrise

Cellematriser brukes til å ringe celleområder som inneholder tekst så vel som tall. En cellematrise i LibreOffice Calc er definert som følger:

Offset | Vavn | Beskrivelse
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
2 | Rad 1 | Radnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
4 | Tabell 1 | Tabellnummer i det øvre venstre hjørne av celleområdet. Nummerering begynner ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
8 | Rad 2 | Radnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
10 | Tabell 2 | Tabellnummer i det nedre høyre hjørne av celleområdet. Nummerering begynner ved 0.
12 | Tell | Antall følgende elementer. Tomme celler telles eller passeres ikke.
14 | uKolonne | Kolonnenummer. Nummerering begynner ved 0.
16 | Rad | Radnummer. Nummerering begynner ved 0.
18 | Tabell 1 | Radnummer. Nummerering begynner ved 0.
20 | Feil | Feilnummer, der verdien 0 er definert som "ingen feil." Hvis elementet kommer fra en formelcelle, bestemmes feilverdien av formelen.
22 | Type | Type celleinnhold, 0 == Dobbel, 1 == Streng
24 | Verdi eller Len | Hvis type == 0: 8 byte IEEE-variabel av typen dobbelt/flytende komma Hvis type == 1: Lengden på følgende streng, inkludert avsluttende nullbyte. Hvis lengden inkludert avsluttende nullbyte er lik en oddeverdi, legges en andre nullbyte til strengen slik at en partallsverdi oppnås. Derfor beregnes Len ved å bruke ((StrLen+2)&~1).
26 hvis type==1 | Streng | Hvis type == 1: Streng med avsluttende null byte
32 eller 26+Len | ... | Neste element