İçerikler

# LibreOffice Calc'de Eklenti Programlaması

Aşağıda anlatılan Eklentiler ile Calc'ın geliştirilmesi metodunun hükmü kalmamıştır. Var olan eklentilerle uyumluluk açısından arabirimler hala geçerlidir ve desteklenir, fakat yeni eklentilerin programlanması için, adresindeki yeni API işlevleri metodlarını kullanmanız tavsiye edilir.

LibreOffice 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 shared library external DLL so that the Add-In can be successfully attached.

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

## Eklenti Kavramı

Eklenti kütüphanelerinin her biri çeşitli işlevler sağlar. Bazı işlevler yönetim amaçlıdır. Kendi işlevleriniz için istediğiniz herhangi bir ismi seçebilirsiniz. Buna rağmen parametrelerin geçirilmesi için bazı kesin kurallara uymalıdırlar. İsimlendirme ve çağırma kuralları farklı platformlara göre değişir.

### Functions of Shared Library AddIn DLL

Asgari olarak, yönetim işlevleri GetFunctionCount ve GetFunctionData mutlaka bulunmalıdır. Bunlar kullanılarak, işlevlerin parametre tipleri ve dönüş değerleri belirlenebilir. Dönüş değerleri olarak, Double and String tipleri desteklenir. Parametre olarak, ilaveten hücre alanları Double Array (Çift duyarlılıklı dizi), String Array (Karakter dizisi), ve Hücre dizisi tipleri desteklenmektedir.

Parametreler başvurular kullanılarak geçirilir, Bu yüzden bu değerlerde değişim mümkündür. Buna rağmen LibreOffice Calc tarafından desteklenilmez, çünkü hesap tabloları içinde anlam kargaşına neden olabilir.

Kütüphaneler çalışma anında tekrar yüklenebilirler ve onların içerikleri yönetimsel işlevler tarafından analiz edilebilir. Her bir işlev için, count ve type (sayı ve tür) parametrelerinde bilgi mevcuttur, bu bilgiler ise iç ve dış işlev isimleri ve yönetimsel numarasıdır.

İşlevler eş zamanlı olarak çağrılır ve onların sonuçları derhal döner. Gerçek zaman işlevleri (eş zamansız işlevler) da mümkündür; ne var ki çok karışık olmaları nedeniyle, ayrıntılı olarak açıklanmayacaktır.

## Arabirim hakkında genel bilgi

LibreOffice Calc'a iliştirilmiş bir eklenti işlevindaki maksimum parametre sayısı 16 adet: bir geri dönen değer ve 15 adet işlev girdi parametresi.

Veri tipleri aşağıdaki gibi tanımlanır:

Veri Türleri | Tanım
--- | ---
CALLTYPE | Windows için: FAR PASCAL (_far _pascal) Diğer: geçerli (işletim sistemi özel varsayılan)
USHORT | 2 byte işaretsiz tamsayı (unsigned Integer)
DOUBLE | 8 byte platform-bağımlı biçim
Paramtype | Platform-bağımlı int (tamsayı) gibi PTR_DOUBLE =0 çift duyarlılıklı veri tipi işaretçisi (pointer to a double) PTR_STRING =1 sıfır ile sonlanan karakter dizisi işaretçisi PTR_DOUBLE_ARR =2 çift duyarlıklı değer dizisi işaretçisi (pointer to a double array) PTR_STRING_ARR =3 karakter dizisi işaretçisi (pointer to a string array) PTR_CELL_ARR =4 bir hücre dizisi işaretçisi (pointer to a cell array) NONE =5

## Shared Library DLL functions

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

For all Shared Library DLL 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()

Başvuru parametresinde, yönetim işlevleri olmaksızın, işlevlerinsayısı ile döner. İşlevlerin her biri 0 ile nCount-1 arasında kendisine özgü tek sayı değerine sahiptir. Bu sayıya GetFunctionData ve GetParameterDescription işlevleri tarafından, daha sonra ihtiyaç duyulacaktır.

Sözdizimi

void CALLTYPE GetFunctionCount(USHORT& nCount)

Parametre

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 LibreOffice Calc, then nCount=5.

### GetFunctionData()

Eklenti işlevi hakkında önemli bütün bilgileri saptar.

Sözdizimi

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

Parametre

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 Shared Library DLL. 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.

pFuncName ve pInternalName parametreleri karakter dizileridr (char arrays), LibreOffice Calc'de 256 byte genişliğinde uygulanır.

### GetParameterDescription()

Eklenti işlevi ve parametreleri hakkında kısa bir bilgi desteği sağlar. Bir seçenek olarak, bu işlev İşlev Sihirbazı'nda bir işlevin tanımını ve parametrelerini açıklamak için kullanılabilir.

Sözdizimi

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

Parametre

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 LibreOffice 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 LibreOffice Calc as char[256].

pName ve pDesc karakter dizileridir; LibreOffice Calc ile 256 bayt uzunluğunda uygulanır. Şunu da not edelim İşlev Sihirbazı için mevcut boşluk 256 karakter ile sınırlandırılmıştır, ve tamamen doldurarak kullanılamaz.

## Hücre alanları

Aşağıdaki tablolar harici program modülüne hücre alanlarının geçirilmesi için, hangi veri yapılarının desteklenmesi gerektiği hakkında bilgi içermektedir. LibreOffice Calc veri tipine bağlı olarak, üç farklı dizi değerlendirir.

### Double Array (64 bitlik dizi )

Bir parametre olarak, Sayı/Double veri tipine sahip bir hücre alanı geçebilir. LibreOffice Calc'de bir Double dizisi şöyle tanımlanır:

Offset | İsim | Açıklama
--- | --- | ---
0 | Sütun1 | Hücre alanında sol üst köşenin sütun numarası. Numaralama 0 ile başlar.
2 | Satır1 | Hücre alanındaki üst sol köşenin satır numarası; numaralama 0 ile başlar.
4 | Sekme1 | Hücre alanında sol üst köşenin tablo numarası; numaralama 0 ile başlar.
6 | Sütun2 | Hücre alanında sağ alt köşenin sütun numarası. numaralama 0 ile başlar.
8 | Satır2 | Hücre alanında sağ alt köşenin satır numarası; numaralama 0 ile başlar.
10 | Sekme2 | Hücre alanında sağ alt köşenin tablo numarası; numaralama 0 ile başlar.
12 | Say | Takip eden öğelerin sayısı. Boş hücreler sayılmaz veya geçirilmez.
14 | Sütun | Ögenin sütun numarasıdır. Numaralama 0 ile başlar.
16 | Satır | Öğenin satır numarası; numaralama 0 ile başlar.
18 | Tablo | Öğenin tablo numarası; numaralama 0 ile başlar.
20 | Hata | Hata numarası, 0 hata yok olarak değerlendirilir. Eğer hata formüllü bir hücreden geliyorsa, hata değeri formül tarafından belirlenir.
22 | Değer | 8 byte IEEE çift duyarlıklı/kayan noktalı değişken tipi (double/floating point)
30 | ... | Sonraki öğe

### String Array (Karakter dizisi)

Metin şeklinde veri tipi içeren bir hücre alanı karakter dizisi (string array) olarak geçirilir. LibreOffice Calc'de karakter dizisi şöyle tanımlanır:

Offset | İsim | Açıklama
--- | --- | ---
0 | Sütun1 | Hücre alanında sol üst köşenin sütun numarası. Numaralama 0 ile başlar.
2 | Satır1 | Hücre alanındaki üst sol köşenin satır numarası; numaralama 0 ile başlar.
4 | Sekme1 | Hücre alanında sol üst köşenin tablo numarası; numaralama 0 ile başlar.
6 | Sütun2 | Hücre alanında sağ alt köşenin sütun numarası. numaralama 0 ile başlar.
8 | Satır2 | Hücre alanında sağ alt köşenin satır numarası; numaralama 0 ile başlar.
10 | Sekme2 | Hücre alanında sağ alt köşenin tablo numarası; numaralama 0 ile başlar.
12 | Say | Takip eden öğelerin sayısı. Boş hücreler sayılmaz veya geçirilmez.
14 | Sütun | Ögenin sütun numarasıdır. Numaralama 0 ile başlar.
16 | Satır | Öğenin satır numarası; numaralama 0 ile başlar.
18 | Tablo | Öğenin tablo numarası; numaralama 0 ile başlar.
20 | Hata | Hata numarası, 0 hata yok olarak değerlendirilir. Eğer hata formüllü bir hücreden geliyorsa, hata değeri formül tarafından belirlenir.
22 | Len (Uzunluk) | Takip eden karakter dizisinin uzunluğu, dizi sonundaki sıfır byte'ıda dahildir. Eğer dizi sonundaki sıfır dahil uzunluk bir tek sayıysa, ikinci bir sıfır byte'ı karakter dizisine eklenir, böylece çift değer sağlanmış olur. Len şu formülle hesaplanır ((StrLen+2)&~1).
24 | Dizi | Sonunda sıfır byte'ı bulunan karakter dizisi
24+Len | ... | Sonraki öğe

### Hücre Alanı

Hücre dizileri sayılardan ziyade, metin içeren hücre aralıklarını çağırmak için kullanılır.LibreOffice Calc'de bir hücre aralığı aşagıdaki gibi tanımlanır:

Offset | İsim | Açıklama
--- | --- | ---
0 | Sütun1 | Hücre alanında sol üst köşenin sütun numarası. Numaralama 0 ile başlar.
2 | Satır1 | Hücre alanındaki üst sol köşenin satır numarası; numaralama 0 ile başlar.
4 | Sekme1 | Hücre alanında sol üst köşenin tablo numarası; numaralama 0 ile başlar.
6 | Sütun2 | Hücre alanında sağ alt köşenin sütun numarası. numaralama 0 ile başlar.
8 | Satır2 | Hücre alanında sağ alt köşenin satır numarası; numaralama 0 ile başlar.
10 | Sekme2 | Hücre alanında sağ alt köşenin tablo numarası; numaralama 0 ile başlar.
12 | Say | Takip eden öğelerin sayısı. Boş hücreler sayılmaz veya geçirilmez.
14 | Sütun | Ögenin sütun numarasıdır. Numaralama 0 ile başlar.
16 | Satır | Öğenin satır numarası; numaralama 0 ile başlar.
18 | Tablo | Öğenin tablo numarası; numaralama 0 ile başlar.
20 | Hata | Hata numarası, 0 hata yok olarak değerlendirilir. Eğer hata formüllü bir hücreden geliyorsa, hata değeri formül tarafından belirlenir.
22 | Tür | Hücre içeriğinin tipi, 0 == Double (Çift duyarlılıklı), 1 == String (Metin)
24 | Değer veya Len | Eğer type == 0 ise: 8 byte IEEE çift duyarlıklı/kayan noktalı değişken tipi (double/floating point) Eğer type==1 ise: Takip eden karakter dizisinin uzunluğu, dizi sonundaki sıfır byte'ıda dahildir. Eğer dizi sonundaki sıfır dahil uzunluk bir tek sayıysa, ikinci bir sıfır byte'ı karakter dizisine eklenir, böylece çift değer sağlanmış olur. Len şu formülle hesaplanır ((StrLen+2)&~1).
26 eğer type==1 | Dizi | Eğer type == 1 ise: Sonunda sıfır baytı bulunan karakter dizisi
32 veya 26+Len | ... | Sonraki öğe