Innhold
Innholdsliste 🔎︎

# Tillegg for programmering i LibreOffice Calc

The method of extending Calc by Add-Ins that is described in the following is outdated. The interfaces are still valid and supported, to ensure compatibility with existing Add-Ins, but for programming new Add-Ins you should use the new API functions.

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 bibliotekekstern DLL slik at tillegget kan kobles til.

LibreOffice søker i tilleggsmappen definert i konfigurasjonen etter et passende delt bibliotekDLL. For å bli gjenkjent av LibreOffice, må delte biblioteketDLL 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 bibliotekAddIn DLL

At a minimum, the administrative functions GetFunctionCount and GetFunctionData must exist. Using these, the functions as well as parameter types and return values can be determined. As return values, the Double and String types are supported. As parameters, additionally the cell areas Double Array, String Array, and Cell Array are supported.

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 bibliotekDLL-funksjoner

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

For alle Delt bibliotekDLL-funksjoner gjelder følgende:

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

Output: Resultatverdi

Input: Any number of types (double&, char*, double*, char**, Cell area), where the Cell area is an array of types double array, string array, or cell array.

### GetFunctionCount()

Returns the number of functions without the management functions of the reference parameter. Each function has a unique number between 0 and nCount-1. This number will be needed for the GetFunctionData and GetParameterDescription functions later.

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 bibliotekDLL. 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