Modul
Indhald
Innhaldsliste 🔎︎

# 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 eksisterande utvidingar, men for programmering av nye utvidingar bør du bruka API-funksjonar.

LibreOffice Calc kan utvidast med programtillegg som er eksterne programmodular som legg fleire funksjonar til i reknearket. Desse er lista opp i funksjonsvegvisaren under kategorien Tillegg. Dersom du ønskjer å programmera ein tilleggsfunksjon, kan du læra her kva funksjonar som må eksporterast med det delte biblioteket den eksterne DLL for å verta korrekt installert.

LibreOffice søkjer i mappa for tilleggsfunksjonar definert i oppsetjinga etter eit høveleg delt bibliotek ein høveleg DLL. For at LibreOffice skal kjenna igjen det delte biblioteket DLL-en, må denne ha bestemte eigenskapar som er forklarte nedanfor. Desse opplysningane gjev deg høve til å programmera din eigen tilleggsfunksjon til Funksjonsvegvisaren 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 parametrane. Dei nøyaktige namnereglane vil variera etter kva plattform som er i bruk.

### Funksjonar i delte bibliotek utvidings-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 parameterar vert i tillegg også celleområda Dobbelt array, Streng array og Celle array støtta.

Parametra 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 maksimale talet på parameterar 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 platformsavhengig format
Parametertype | 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 finne ein omtale av desse funksjonane, som vert kalla opp via Delte bibliotek ekstern DLL.

Følgjande gjeld for alle funksjonar for Delte bibliotek DLL:

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

Output: Resultatverdi

Innskriving: Kva tal som helst av typene (double&, char*, double*, char**, Cell area), der celleområde er eit område av typen dobbel tabell, strengtabell eller celletabell.

### GetFunctionCount()

Returnerer talet på funksjonar utanom administrasjonsfunksjonane for referanseparametra. 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:

Utdata: Referansen til ein variabel som er venta å innehalda talet på AddIn-funksjonar. Dersom programmet for eksempel gjev tilgang til 5 funksjonar for LibreOffice Calcs, 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:

Innskriving: Funksjonens nummer mellom 0 og nCount-1, inklusiv.

char* pFuncName:

Utdata: Funksjonsnamn slik programmeraren ser det med det namnet det har i Shared Library DLL. Dette namnet bestemmer ikkje namnet som vert vist i Funksjonsvegvisaren.

USHORT& nParamCount:

Utdata: Talet på parameter i AddIn-funksjonen. Dette talet må vere større enn 0 fordi det alltid vil vere ein resultatverdi. Høgste verdien er 16.

Paramtype* peType:

Utdata: Peikar på ein tabell med nøyaktig 16 variablar av typen Paramtype. Dei første nParamCount innslaga er utfylte med passande parametertypar.

char* pInternalName:

Utdata: Funksjonsnamna slik brukaren ser dei og slik dei vert viste i Funksjonsvegvisaren. Kan innehalda aksentteikn (ö, â osv).

Parametra 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

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

Parameter

USHORT& nNo:

Innskriving: Nummeret for funksjonen i biblioteket; mellom 0 og nCount-1.

USHORT& nParam:

Innskriving: Indikerer kva for parameter beskrivinga gjeld for. Parametra byrjar med 1. Dersom nParam er 0, går ein ut frå at beskrivinga er tilgjengeleg i pDesc. I dette tilfellet betyr ikkje pName noko som helst.

char* pName:

Output: Finn parameternamnet og type, for eksempel «Nummer», "Streng" eller «Dato» og så vidare. Implementert i LibreOffice Calc som TEIKN[256].

char* pDesc:

Output: Finn beskrivinga av paremetra, for eksempel «Verdien som universet skal reknast ut etter». Implementert i LibreOffice Calc som TEIKN[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. Tome 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. Tome 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 | Len | 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 + Lengd | … | Neste element

### Celletabell

Celletabellar vert brukte for å kalle 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. Tome celler vertikkje 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