Doplňky pro programování v LibreOfficeDev Calc

Ikona upozornění

Způsob rozšiřování Calcu pomocí doplňků, který je popsán v následující části, je zastaralý. Rozhraní jsou stále platná a podporována, aby byla zajištěna kompatibilita s existujícími doplňky, ale pro programování nových doplňků byste měli použít funkce API.


LibreOfficeDev Calc can be expanded by Add-Ins, which are external programming modules providing additional functions for working with spreadsheets. These are listed in the Function Wizard in the Add-In category. If you would like to program an Add-In yourself, you can learn here which functions must be exported by the so that the Add-In can be successfully attached.

LibreOfficeDev searches the Add-in folder defined in the configuration for a suitable . To be recognized by LibreOfficeDev, the must have certain properties, as explained in the following. This information allows you to program your own Add-In for Function Wizard of LibreOfficeDev Calc.

Princip doplňků

Každá knihovna doplňků poskytuje několik funkcí. Některé funkce se používají pro účely administrace. Pro své funkce můžete zvolit téměř jakýkoliv název. Musíte ovšem dodržet určitá pravidla pro předávání parametrů. Přesná konvence pojmenování a volání se liší pro různé platformy.

Functions of

Musí existovat minimálně administrativní funkce GetFunctionCount a GetFunctionData. Pomocí těchto funkcí je možné určit další funkce, typy parametrů a návratové hodnoty. Pro návratové hodnoty jsou podporovány typy Double a String. Jako parametry jsou navíc podporovány oblasti buněk Double Array, String Array a Cell Array.

Parametry se předávají odkazem. Tudíž je v podstatě možná změna jejich hodnoty. Ovšem LibreOfficeDev Calc tuto vlastnost nepodporuje, protože v sešitech nemá smysl.

Knihovny je možné kdykoliv za běhu znovu načíst a analyzovat jejich obsah pomocí administrativních funkcí. Pro každou funkci jsou k dispozici informace o počtu a typech parametrů, interní a externí název funkce a administrativní číslo funkce.

Funkce jsou volány současně (synchronně) a výsledek vracejí okamžitě. Jsou možné i funkce reálného času (asynchronní funkce), ty zde nicméně nejsou pro svou složitost podrobněji vysvětleny.

Obecné informace o rozhraní

Maximální počet parametrů ve funkci doplňku LibreOfficeDev Calc je 16: jedna návratová hodnota a maximálně 15 vstupních parametrů.

Datové typy jsou definovány takto:

Datové typy

Definice

CALLTYPE

Systém Windows: FAR PASCAL (_far _pascal)

Jiné: výchozí (podle operačního systému)

USHORT

2bajtové celé kladné číslo

DOUBLE

8bajtový formát podle platformy

Paramtype

Int podle platformy

PTR_DOUBLE =0 ukazatel na typ double

PTR_STRING =1 ukazatel na řetězec zakončený 0

PTR_DOUBLE_ARR =2 ukazatel na pole typu double

PTR_STRING_ARR =3 ukazatel na pole řetězců

PTR_CELL_ARR =4 ukazatel na pole buněk

NONE =5


functions

Following you will find a description of those functions, which are called at the .

For all functions, the following applies:

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

Output: Resulting value

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()

Vrací počet funkcí bez administrativní funkce referenčního parametru. Každá funkce má jedinečné číslo od 0 do nCount-1. Toto číslo je třeba pro funkce GetFunctionData a GetParameterDescription.

Syntaxe

void CALLTYPE GetFunctionCount(USHORT& nCount)

Parametr

USHORT &nCount:

Output: Reference to a variable, which is supposed to contain the number of Add-In functions. For example: If the Add-In provides 5 functions for LibreOfficeDev Calc, then nCount=5.

GetFunctionData()

Zjistí všechny důležité informace o funkci doplňku.

Syntaxe

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

Parametr

USHORT& nNo:

Input: Function number between 0 and nCount-1, inclusively.

char* pFuncName:

Output: Function name as seen by the programmer, as it is named in the . This name does not determine the name used in the Function Wizard.

USHORT& nParamCount:

Output: Number of parameters in AddIn function. This number must be greater than 0, because there is always a result value; the maximum value is 16.

Paramtype* peType:

Output: Pointer to an array of exactly 16 variables of type Paramtype. The first nParamCount entries are filled with the suitable type of parameter.

char* pInternalName:

Output: Function name as seen by the user, as it appears in the Function Wizard. May contain umlauts.

Parametry pFuncName a pInternalName jsou pole znaků, která jsou v LibreOfficeDev Calc implementována o velikosti 256.

GetParameterDescription()

Poskytuje krátký popis funkce doplňku a jejích parametrů. Volitelně lze tuto funkci použít k zobrazení popisu funkce a parametrů v Průvodci funkcí.

Syntaxe

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

Parametr

USHORT& nNo:

Input: Number of the function in the library; between 0 and nCount-1.

USHORT& nParam:

Input: Indicates, for which parameter the description is provided; parameters start at 1. If nParam is 0, the description itself is supposed to be provided in pDesc; in this case, pName does not have any meaning.

char* pName:

Output: Takes up the parameter name or type, for example, the word "Number" or "String" or "Date", and so on. Implemented in LibreOfficeDev Calc as char[256].

char* pDesc:

Output: Takes up the description of the parameter, for example, "Value, at which the universe is to be calculated." Implemented in LibreOfficeDev Calc as char[256].

pName a pDesc jsou pole znaků; v LibreOfficeDev Calc implementovány o velikosti 256. Poznámka: místo dostupné v Průvodci funkcí je omezené, není možné plně využít všech 256 znaků.

Oblasti buněk

Následující tabulky obsahují informace o tom, jaké datové struktury musí externí programový modul poskytovat, aby bylo možné předávat oblasti buněk. LibreOfficeDev Calc rozlišuje mezi třemi různými poli (v závislosti na datovém typu).

Pole typu double

Jako parametr je možné předat oblast buněk s hodnotami typu Number/Double. Pole typu double je v LibreOfficeDev Calc definováno takto:

Offset

Name

Description

0

Col1

Číslo sloupce v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

2

Row1

Číslo řádku v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

4

Tab1

Číslo tabulky v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

6

Col2

Číslo sloupce v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

8

Row2

Číslo řádku v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

10

Tab2

Číslo tabulky v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

12

Počet

Počet prvků, které následují. Prázdné buňky nejsou započítány ani předávány.

14

Sloupec

Číslo sloupce daného prvku. Číslování začíná číslem 0.

16

Řádek

Číslo řádku daného prvku. Číslování začíná číslem 0.

18

Tabulátor

Číslo tabulky daného prvku. Číslování začíná číslem 0.

20

Chyba

Číslo chyby. Hodnota 0 má význam „bez chyby“. Pochází-li prvek z buňky obsahující vzorec, je hodnota chyby dána vzorcem.

22

Hodnota

8bajtová proměnná IEEE typu double s plovoucí desetinnou čárkou

30

...

Další prvek


Pole řetězců

Oblast buněk, která obsahuje hodnoty typu Text a předává se jako pole řetězců. Pole typu string je v LibreOfficeDev Calc definováno takto:

Offset

Name

Description

0

Col1

Číslo sloupce v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

2

Row1

Číslo řádku v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

4

Tab1

Číslo tabulky v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

6

Col2

Číslo sloupce v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

8

Row2

Číslo řádku v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

10

Tab2

Číslo tabulky v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

12

Počet

Počet prvků, které následují. Prázdné buňky nejsou započítány ani předávány.

14

Sloupec

Číslo sloupce daného prvku. Číslování začíná číslem 0.

16

Řádek

Číslo řádku daného prvku. Číslování začíná číslem 0.

18

Tabulátor

Číslo tabulky daného prvku. Číslování začíná číslem 0.

20

Chyba

Číslo chyby. Hodnota 0 má význam „bez chyby“. Pochází-li prvek z buňky obsahující vzorec, je hodnota chyby dána vzorcem.

22

Len

Délka následujícího řetězce včetně závěrečného nulového bajtu. Má-li délka včetně závěrečného nulového bajtu lichou hodnotu, je k řetězci přidán druhý nulový bajt, aby měla délka sudou hodnotu. Parametr Len se tedy vypočítá podle vzorce ((StrLen+2)&~1).

24

Řetězec

Řetězec, který je zakončen nulovým bajtem.

24+Len

...

Další prvek


Pole buněk

Pole buněk se používají k odkazu na buňky, které obsahují text i čísla. Pole buněk je v LibreOfficeDev Calc definováno takto:

Offset

Name

Description

0

Col1

Číslo sloupce v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

2

Row1

Číslo řádku v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

4

Tab1

Číslo tabulky v levém horním rohu oblasti buněk. Číslování začíná číslem 0.

6

Col2

Číslo sloupce v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

8

Row2

Číslo řádku v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

10

Tab2

Číslo tabulky v pravém dolním rohu oblasti buněk. Číslování začíná číslem 0.

12

Počet

Počet prvků, které následují. Prázdné buňky nejsou započítány ani předávány.

14

Sloupec

Číslo sloupce daného prvku. Číslování začíná číslem 0.

16

Řádek

Číslo řádku daného prvku. Číslování začíná číslem 0.

18

Tabulátor

Číslo tabulky daného prvku. Číslování začíná číslem 0.

20

Chyba

Číslo chyby. Hodnota 0 má význam „bez chyby“. Pochází-li prvek z buňky obsahující vzorec, je hodnota chyby dána vzorcem.

22

Typ

Typ obsahu buňky. 0 == typ double, 1 == řetězec.

24

Value nebo Len

Jestliže Type == 0: 8bajtová proměnná IEEE typu double s plovoucí desetinnou čárkou

Jestliže Type == 1: Délka následujícího řetězce včetně závěrečného nulového bajtu. Má-li délka včetně závěrečného nulového bajtu lichou hodnotu, je k řetězci přidán druhý nulový bajt, aby měla délka sudou hodnotu. Parametr Len se tedy vypočítá podle vzorce ((StrLen+2)&~1).

26 jestliže Type==1

Řetězec

Jestliže Type == 1: Řetězec, který je zakončen nulovým bajtem.

32 nebo 26+Len

...

Další prvek