Innhald

# Tillegg for programmering i LibreOffice Calc

Metoden for å leggja til utvidingar i Calc omtalt nedanfor er forelda. Grensesnittet er framleis gyldig for å sikra kompatibilitet med utvidingar som finst, men for programmering av nye utvidingar bør du bruka API-funksjonar.

LibreOffice Calc kan utvidast med Add-ins, som er eksterne programmeringsmodular med ekstra funksjonar for å arbeida med rekneark. Desse er oppførte i Funksjonsvegvisaren i kategorien Add-In. Viss du vil programmera eit tillegg sjølv, kan du læra her kva for funksjonar som må eksporterast av delte bibliotek ekstern DLL slik at tillegget kan koplast til slik at det fungerer.

LibreOffice søkjer i tilleggsmappa som er definert i oppsettinga for eit passande delt bibliotek DLL . For å verta gjenkjent av LibreOffice, må delt bibliotek DLL ha visse eigenskapar som er forklarte nedanfor. Denne informasjonen gjer at du kan programmera ditt eiget tillegg for funksjon-vegvisar i LibreOffice Calc.

## Konseptet utvidingar

Kvart utvidingsbibliotek inneheld fleire funksjonar du kan bruka. Nokre av funksjonane er til administrativt bruk. Du kan kalla funksjonane nesten kva som helst. Namnet må likevel følgje bestemte reglar ved overføring av parameterane. Dei nøyaktige namnereglane vil variera etter kva plattform som er i bruk.

### Funksjonar for delt bibliotek Legg til DLL

Som eit minimum skal dei administrative funksjonane GetFunctionCount og GetFunctionData finnast. Ved hjelp av desse kan både funksjonar, parametertypar og returverdiar bestemmast. Som returverdiar er det støtte for både dobbelt- og strengtypar. Som parametrar vert i tillegg også celleområda Dobbelt array, Streng array og Celle array støtta.

Parameterane vert overførte via referansar. Difor kan du i utgangspunktet endra desse verdiane. Dette gjeld ikkje i LibreOffice Calc fordi det ikkje gjev meining i eit rekneark.

Biblioteka kan lastast inn under køyringa og innhaldet kan analyserast av dei administrative funksjonane. For kvar funksjon er informasjon om kor mange og kva type parameter som finst, interne og eksterne funksjonsnamn og eit administrativt nummer.

Funksjonane vert kalla opp synkront og returnerer resultata straks. Realtidsfunksjonar (asynkrone funksjonar) er også mogleg, men desse er ikkje forklarte i detaljar her fordi dei er så komplekse.

## Generell informasjon om grensesnittet

Det største talet på parametrar i ei utviding i LibreOffice Calc er 16: éin returverdi og høgst 15 argument for inndata.

Datatypane vert definerte slik:

Datatypar | Definisjon
--- | ---
CALLTYPE | Under Windows: FAR PASCAL (_far _pascal) Anna: standard (operativsystemspesifikk standard)
USHORT | 2-byte heiltal utan forteikn
DOUBLE | 8-byte plattformsavhengig format
Paramtype | Plattformsavhengige som heiltal PTR_DOUBLE =0 peikar til ein double PTR_STRING =1 peikar til ein null-terminert streng PTR_DOUBLE_ARR =2 peikar til ein double array PTR_STRING_ARR =3 peikar til ein strengtabell PTR_CELL_ARR =4 peikar til ein strengtabell NONE =5

## Delt bibliotek DLL-funksjonar

Nedanfor vil du finna ein omtale av desse funksjonane som vert kalla delte bibliotek ekstern DLL.

Det følgjande gjeld for alle delte bibliotek DLL-funksjonane:

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

Output: Resultatverdi

Input: Kva tal som helst av typar (double&, char*, double*, char**, Celleområde) der Celleområdet er ein tabell av typen dobbel tabell, strengtabell eller celletabell.

### GetFunctionCount()

Returnerer talet på funksjonar utanom administrasjonsfunksjonane for referanseparameterane. Kvar funksjon har eit unikt nummer frå 0 til nCount-1. Dette nummeret vert seinare brukt av funksjonane GetFunctionData og GetParameterDescription.

Syntaks

void CALLTYPE GetFunctionCount(USHORT& nCount)

Parameter

USHORT &nCount:

Output: Referanse til ein variabel som er meint å innehalda talet på Add-n-funksjonar. For eksempel: Viss Add-In inneheld 5 funksjonar for LibreOffice Calc så er nCount = 5.

### GetFunctionData()

Bestemmer all viktig informasjon om ein tilleggsfunksjon.

Syntaks

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

Parameter

USHORT& nNo:

Input: Funksjonsnummer frå og med 0 til og med nCount-1.

char* pFuncName:

Output: Funksjonsnamnet slik programmeraren ser det, slik det er namngjeve i Delt bibliotek DLL. Dette namnet bestemmer ikkje namnet i funksjonsvegvisaren.

USHORT& nParamCount:

Output: Talet på parametrar i Add-In-funksjonen. Talet må vera større enn 0 sidan det alltid er ein resultatverdi. Det høgaste talet er 16.

Paramtype* peType:

Output: Peikar til ein tabell med nøyaktig 16 variablar av typen paramtype. Dei første nParamCount oppføringane er fylte med høveleg type parameter.

char* pInternalName:

Output: Funksjonsnamn slik brukaren ser dei slik dei vert viste i funksjonsvegvisaren. Kan innehalda aksentteikn.

Parameterane pFuncName og pInternalName er teikntabellar som er implementerte med storleiken 256 i LibreOffice Calc.

### GetParameterDescription()

Gjev ei kort beskriving av tilleggsfunksjonane og parameterane deira. Denne funksjonen kan også nyttast for å visa ei funksjons- og parameterbeskriving i Funksjonsvegvisaren.

Syntaks

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

Parameter

USHORT& nNo:

Input: Talet på funksjonar i biblioteket, mellom 0 og nCount-1.

USHORT& nParam:

Input: Viser kva parameter beskrivinga er meint for. Parameterane byrjar på 1. Viss nParam er 0, skal beskrivinga i seg sjølv vera vist i pDesc. I dette tilfellet betyr ikkje pName noko.

char* pName:

Output: Tek opp parameternamnet eller typen, for eksempel orda «tal», «streng» eler «dato». Implementert i LibreOffice Calc som char[256].

char* pDesc:

Output: Tek opp ei skildring av parameteren, for eksempel «Verdien som universet skal reknast ut frå». Implementert i LibreOffice Calc som char[256].

pName og pDesc er tabellar implementerte i LibreOffice Calc med storleiken 256. Legg merkje til at den tilgjengelege plassen i Funksjonsvegvisaren er avgrensa og at ikkje alle 256 teikna kan brukast.

## Celleområde

Dei følgjande tabellane inneheld informasjon om kva datastrukturar som må leverast av ein ekstern programmodul for å overføre celleområde. LibreOffice Calc skil mellom tre ulike tabellar (arrays) avhengig av datatypen.

### Dobbelt matrise

Du kan overføre eit celleområde med verdiar av typen tal/dobbel. Ein dobbeltabell er i LibreOffice Calc definert slik:

Forskyving | Namn | Beskriving
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
2 | Rad 1 | Radnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
4 | Tabell 1 | Tabellnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
6 | Kolonne 2 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
8 | Rad2 | Radnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
10 | Tab2 | Tabellnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
12 | Tel | Talet på dei følgjande elementa. Tomme celler vert ikkje talde og vert heller ikkje overførte.
14 | Kol | Kolonnenummeret for elementet. Nummereringa byrjar frå 0.
16 | Rad | Radnummeret for elementet. Nummereringa byrjar frå 0.
18 | Tabell | Tabellnummeret for elementet. Nummereringa byrjar frå 0.
20 | Feil | Feilnummer der verdien 0 er definert som «ingen feil». Dersom elementet kjem frå ei formelcelle, er feilverdien bestemt av formelen.
22 | Verdi | 8-byte IEEE variabel av typen dobbelt/desimaltal
30 | ... | Neste element

### Strengtabell

Eit celleområde som inneheld verdiar av datatypen tekst er overført som ein strengtabell. I LibreOffice Calc er ein strengtabell definert slik:

Forskyving | Namn | Beskriving
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
2 | Rad 1 | Radnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
4 | Tabell 1 | Tabellnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
6 | Kolonne 2 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
8 | Rad2 | Radnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
10 | Tab2 | Tabellnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
12 | Tel | Talet på dei følgjande elementa. Tomme celler vert ikkje talde og vert heller ikkje overførte.
14 | Kol | Kolonnenummeret for elementet. Nummereringa byrjar frå 0.
16 | Rad | Radnummeret for elementet. Nummereringa byrjar frå 0.
18 | Tabell | Tabellnummeret for elementet. Nummereringa byrjar frå 0.
20 | Feil | Feilnummer der verdien 0 er definert som «ingen feil». Dersom elementet kjem frå ei formelcelle, er feilverdien bestemt av formelen.
22 | Lengd | Lengda av den etterfølgjande strengen, inklusive avsluttande null-byte. Dersom lengda inklusive null-byten er eit oddetal, vert det lagt til ein ekstra null-byte slik at lengda vert eit partal. Difor vert Len rekna ut med ((StrLen+2)& 1).
24 | Streng | Streng med avsluttande null-byte.
24+Len | ... | Neste element

### Celletabell

Celletabellar vert brukte for å kalla opp celleområde som inneheld tekst eller tal. Ein celletabell er i LibreOffice Calc definert slik:

Forskyving | Namn | Beskriving
--- | --- | ---
0 | Kolonne 1 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
2 | Rad 1 | Radnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
4 | Tabell 1 | Tabellnummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
6 | Kolonne 2 | Kolonnenummer i det øvre, venstre hjørne av celleområdet. Nummereringa byrjar med 0.
8 | Rad2 | Radnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
10 | Tab2 | Tabellnummeret i det nedre, høgre hjørnet av celleområdet. Nummereringa byrjar med 0.
12 | Tel | Talet på dei følgjande elementa. Tomme celler vert ikkje talde og vert heller ikkje overførte.
14 | Kol | Kolonnenummeret for elementet. Nummereringa byrjar frå 0.
16 | Rad | Radnummeret for elementet. Nummereringa byrjar frå 0.
18 | Tabell | Tabellnummeret for elementet. Nummereringa byrjar frå 0.
20 | Feil | Feilnummer der verdien 0 er definert som «ingen feil». Dersom elementet kjem frå ei formelcelle, er feilverdien bestemt av formelen.
22 | Type | Type for celleinnhaldet, 0 = Dobbelt, 1 = Streng
24 | Verdi eller lengd | Dersom type == 0: 8 byte IEEE-variabel av typen dobbelt/flytande komma Dersom type ==1: Lengda av strengen som kjem etter, inklusive avsluttande null-byte. Dersom lengda inklusive den avsluttande null-byten er eit oddetal, vert det lagt ein ekstra null-byte til strengen slik at lengda vert eit partal. Difor vert lengda rekna ut som ((StrLen+2)&~1).
26 dersom type==1 | Streng | Dersom type = 1: Streng med avsluttande null-byte.
32 eller 26 + Lengd | … | Neste element