Modul
Indhold
Indholdsfortegnelse 🔎︎

# Tilføjelsesfunktioner til programmering i LibreOffice Calc

Den metode til udvidelse af Calc ved hjælp af tilføjelsesfunktioner, der er beskrevet i det følgende, er forældet. Grænsefladen er stadig gyldig og understøttet for at sikre kompatibilitet med eksisterende tilføjelsesfunktioner, men til programmering af nye tilføjelsesfunktioner bør du bruge de nye API-funktioner.

LibreOffice Calc kan udvides med tilføjelsesfunktioner, som er eksterne programmeringsmoduler, der leverer yderligere funktioner til arbejdet med regneark. Disse vises i Funktionsguiden i kategorien Tilføjelsesfunktioner. Hvis du gerne selv vil programmere en tilføjelsesfunktion, kan du her lære, hvilke funktioner, der skal eksporteres af det delte bibliotek den eksterne DLL for at installere din tilføjelsesfunktion korrekt.

LibreOffice søger i mappen til tilføjelsesfunktioner defineret i konfigurationen efter et passende delt bibliotek en passende DLL. For at blive genkendt af LibreOffice skal det delte bibliotek DLL'en have bestemte egenskaber, som er forklaret i det følgende. Disse oplysninger giver dig mulighed for at programmere din egen tilføjelsesfunktion til Funktionsguiden i LibreOffice Calc.

## Begrebet tilføjelsesfunktioner

Hvert bibliotek med tilføjelsesfunktioner stiller flere forskellige funktioner til rådighed. Nogle funktioner bruges til administrative formål. Du kan vælge næsten et hvilket som helst navn til din egen funktion. Dog skal du følge nogle bestemte regler angående parameteroverførsel. De præcise konventioner for navngivning og procedurekalde varierer for forskellige platforme.

### Funktioner af Delte biblioteker Tilføjelsesprogram-DLL

Som minimum skal de administrative funktioner GetFunctionCount og GetFunctionData være tilstede. Ved hjælp af disse kan såvel funktioner, parametertyper og returværdier identificeres. Som returværdier understøttes dobbelt- og strengtyper. Som parametre kan understøttes typerne celleområder Dobbelt array, Streng array, og Celle array benyttes.

Parametre bliver videresendt via referencer. Derfor vil en ændring af disse værdier være mulig. Dog er dette ikke understøttet i LibreOffice Calc, fordi det ikke giver mening i et regneark.

Biblioteker kan genindlæses under afvikling, og deres indhold kan analyseres af de administrative funktioner. For hver funktion er informationer om antal og type af parametre, interne og eksterne funktionsnavne og et administrationsnummer tilgængelige.

Funktionerne kaldes synkront og returnerer deres resultater straks. Realtidsfunktioner (asynkrone funktioner) er også mulige; dog er de ikke forklaret i detaljer på grund af deres kompleksitet.

## Generel information om grænsefladen

Det maksimale antal parametre i en tilføjelsesfunktion i LibreOffice Calc er 16: én returværdi og højst 15 argumenter.

Datatyperne defineres som følger:

Datatyper | Definition
CALLTYPE | Under Windows: FAR PASCAL (_far _pascal) Andet: standard (operativsystemspecifik standard)
USHORT | 2-byte heltal uden fortegn
DOUBLE | 8-byte platformsafhængigt format
Parametertype | Platformsafhængigt som heltal PTR_DOUBLE =0 pegepind til en DOUBLE PTR_STRING =1 pegepind til en nul-termineret streng PTR_DOUBLE_ARR =2 pegepind til en dobbelt matrix PTR_STRING_ARR =3 pegepind til en strengmatrix PTR_CELL_ARR =4 pegepind til en cellematrix Ingen =5

## Delte Biblioteker DLLfunktioner

Efterfølgende vil du finde en beskrivelse af disse funktioner, som kaldesDelte Biblioteker ekstern DLL.

For ethvertDelte Biblioteker DLLfunktioner, gælder følgende:

void CALLTYPE fn(ud, ind1, ind2, ...)

Output: resulterende værdi

Indtastning: Hvilket som helst tal af typerne (double&, char*, double*, char**, Cell area), hvor Cell area er et område af typen double array, string array eller cell array.

### GetFunctionCount()

Returnerer antallet af funktioner udover administrationsfunktioner til henvisningsparametre. Hver funktion har et unikt nummer mellem 0 og nCount-1. Dette nummer skal bruges i GetFunctionData og GetParameterDescription funktionerne senere.

Syntaks

void CALLTYPE GetFunctionCount(USHORT& nCount)

Parameter

USHORT &nCount:

Output: Reference til en variabel, som antages at indeholde antallet af tilføjelsesfunktioner. Hvis programmet for eksempel giver adgang til 5 funktioner for LibreOffice Calc, så er nCount=5.

### GetFunctionData()

Bestemmer alle de vigtige informationer om en tilføjelsesfunktion.

Syntaks

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

Parameter

USHORT& nNo:

Indtastning: Funktionens nummer mellem 0 og nCount-1, inklusiv.

TEGN* pFuncName:

Output: Funktionsnavn som set af den programmør, som det er navngivet i det delte bibliotek DLL. Dette navn vil ikke bestemme navnet som bruges i Funktionsguiden.

USHORT& nParamCount:

Output: Antal parametre i tilføjelsesfunktionen. Dette tal skal være større end 0, fordi der altid er et resultat. Den maksimale værdi er 16.

Paramtype* peType:

Output: Peger på et array af præcis 16 variable af typen Paramtype. Det første nParamCount elementer er udfyldt med den passende type af parameter.

char* pInternalName:

Output: Funktionsnavn som set af brugeren, som det ser ud i Funktionsguiden. Kan indeholde accenter.

pFuncName og pInternalName parametrene er tegnområder, som er implementeret med størrelse 256 i LibreOffice Calc.

### GetParameterDescription()

Giver en kort beskrivelse af tilføjelsesfunktionen og dens parametre. Denne funktion kan bruges som en mulighed for at vise en funktions- og parameterbeskrivelse i Funktionsguiden.

Syntaks

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

Parameter

USHORT& nNo:

Indtastning: Funktionens nummer i biblioteket; mellem 0 og nCount-1.

USHORT& nParam:

Indtastning: Angiver, for hvilken parameter beskrivelsen gælder. Parametre starter ved 1. Hvis nParam er 0, antages beskrivelsen at være tilgængelig i pDesc. I dette tilfælde har pName ingen betydning.

char* pName:

Output: Finder parameternavnet eller type, for eksempel, ordet "Værdi" eller "Streng" eller "Dato", og så videre. Implementeret i LibreOffice Calc som TEGN[256].

char* pDesc:

Output: Finder beskrivelsen på parameteren, for eksempel, "Værdi, hvor den universelle skal beregnes." Implementeret i LibreOffice Calc som TEGN[256].

pName og pDesc er tegnområder; implementeret i LibreOffice Calc med størrelse 256. Bemærk at den tilgængelige plads i Funktionsguiden er begrænset og at de 256 tegn ikke kan udnyttes fuldt ud.

## Celleområder

De følgende tabeller indeholder information om hvilke data strukturer der skal leveres af et eksternt programmodul for at overføre celleområder. LibreOffice Calc skelner mellem tre forskellige arrays afhængigt af datatypen.

### Dobbelt matrix

Et celleområde med værdier som heltal eller dobbelt kan overføres som parameter. Et dobbelt array i LibreOffice Calc er defineret som følger:

Forskydning | Navn | Beskrivelse
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
2 | Række 1 | Rækkenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
4 | Tabel 1 | Tabelnummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
8 | Række 2 | Rækkenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
10 | Tabel 2 | Tabelnummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
12 | Tæl | Antal af de følgende elementer. Tomme celler bliver ikke medtaget eller overført.
14 | Kolonne | Kolonnenummer. Nummerering begynder ved 0.
16 | Række | Rækkenummer; nummereringen starter ved 0.
18 | Tabel | Tabelnummer; nummereringen starter ved 0.
20 | Fejl | Fejlnummer, hvor værdien 0 er defineret som "ingen fejl." Hvis elementet kommer fra en formelcelle, er fejlværdien bestemt af formlen.
22 | Værdi | 8-byte IEEE-variabel af typen double (flydende komma med dobbelt præcision)
30 | ... | Næste element

### Strengmatrix

Et celleområde som indeholder værdier af datatype Tekst og er overført som en strengtabel. En strengtabel i LibreOffice Calc er defineret som følger:

Forskydning | Navn | Beskrivelse
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
2 | Række 1 | Rækkenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
4 | Tabel 1 | Tabelnummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
8 | Række 2 | Rækkenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
10 | Tabel 2 | Tabelnummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
12 | Tæl | Antal af de følgende elementer. Tomme celler bliver ikke medtaget eller overført.
14 | Kolonne | Kolonnenummer. Nummerering begynder ved 0.
16 | Række | Rækkenummer; nummereringen starter ved 0.
18 | Tabel | Tabelnummer; nummereringen starter ved 0.
20 | Fejl | Fejlnummer, hvor værdien 0 er defineret som "ingen fejl." Hvis elementet kommer fra en formelcelle, er fejlværdien bestemt af formlen.
22 | LÆNGDE | Længde af den efterfølgende streng, medregnet den afsluttende nul-byte. Hvis længden medregnet den afsluttende nul-byte er ulige, tilføjes endnu en nul-byte, så et lige antal bytes opnås. Derfor beregnes Len som ((StrLen+2)&~1).
24 | Streng | Streng med afsluttende nul-byte.
24+LÆNGDE | ... | Næste element

### Cellematrix

Cellematricer bruges til at kalde celleområder som indeholder tekst såvel som tal. En cellematrix i LibreOffice Calc er defineret som følger:

Forskydning | Navn | Beskrivelse
0 | Kolonne 1 | Kolonnenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
2 | Række 1 | Rækkenummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
4 | Tabel 1 | Tabelnummer i det øvre venstre hjørne af celleområdet. Nummerering begynder ved 0.
6 | Kolonne 2 | Kolonnenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
8 | Række 2 | Rækkenummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
10 | Tabel 2 | Tabelnummer i det nedre højre hjørne af celleområdet. Nummerering begynder ved 0.
12 | Tæl | Antal af de følgende elementer. Tomme celler bliver ikke medtaget eller overført.
14 | Kolonne | Kolonnenummer. Nummerering begynder ved 0.
16 | Række | Rækkenummer; nummereringen starter ved 0.
18 | Tabel | Tabelnummer; nummereringen starter ved 0.
20 | Fejl | Fejlnummer, hvor værdien 0 er defineret som "ingen fejl." Hvis elementet kommer fra en formelcelle, er fejlværdien bestemt af formlen.
22 | Type | Type af celleindholdet, 0 = Dobbelt, 1 = Streng
24 | Værdi eller LÆNGDE | Hvis type == 0: 8-byte IEEE-variabel af typen double (flydende komma med dobbelt præcision) Hvis typen = 1: Længden af den følgende streng, inklusiv afsluttende nul-byte. Hvis længden inklusiv afsluttende nul-byte er lig med en ulige værdi tilføjes endnu en nul-byte til strengen så en lige værdi er opnået. Derfor er længden beregnet som ((StrLen+2)&~1).
26 hvis type==1 | Streng | Hvis type = 1: Streng med afsluttende nul-byte.
32 eller 26+LÆNGDE | ... | Næste element