İçerikler
Dizin 🔎︎

# 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 eklentilerle geliştirilebilir, harici program modülleri ile hesap tabloları için ilaveten işlevler sağlanır. Bu işlevler İşlev Sihirbazı'nda Ekle kategorisinde listelenirler. Eğer kendi kendinize bir eklenti programlamak istiyorsanız, burada shared library harici DLL lerde hangi işlevlerin ihraç edilmesi gerektiğini, öğrenebilirsiniz. Böylece eklentileriniz başarılı bir şekilde Calc'a bağlanabilirler.

LibreOffice kurulumda yapılandırılmış olan eklenti klasörünü mevcut shared library DLL eklentileri için araştırır. LibreOffice tarafından tanınması için, shared library DLL aşağıda açıklandığı gibi, belirlenmiş özelliklere sahip olmalıdır. Bu bilgi LibreOffice Calc'da İşlev sihirbazı için kendi eklentinizi programlayabilmenizi sağlar.

## 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.

### Paylaşılan Kitaplık Eklenti DLL İşlevleri

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 (Çağırma türü) | 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 (Parametre tipi) | 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

## Paylaşılan Kitaplık DLL işlevleri

Aşağıda Paylaşılan Kitapllık harici DLL'ler tarafından çağrılan, bu işlevler hakkında açıklamaları bulacaksınız.

Bütün Paylaşılan Kitaplık DLL işlevleriiçin, aşağıdakiler uygulanır:

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

Çıktı: Sonuç değeri

Girdi: herhangi bir sayıda türler (double&, char*, double*, char**, Hücre alanı), ki buradaHücre alanı; double dizi, karakter dizisi, ve hücre dizisi türlerinden oluşan bir dizidir.

### 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:

Çıktı: Bir değişkene başvuru, Eklenti işlevlerinde bulunan sayılarca desteklenen Örneğin: Eğer eklentide LibreOffice Calc için, 5 işlev bulunmaktaysa, 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:

Girdi: 0 ve nCount-1 arasındaki sayıları kapsayan, işlev numarası.

char* pFuncName:

Çiktı: Programcı tarafından görüldüğü şekilde İşlev ismi, Paylaşılan Kitaplık DLL isimlendirilmiş şekilde. Bu isim İşlev Sihirbazı'nda kullanılan isimle aynı değildir.

USHORT& nParamCount:

Çıktı: Eklenti işlevindaki parametrelerin sayısı. Bu sayı 0 değerinden büyük olmalıdır, çünkü daima bir sonuç değeri vardır; Azami değeri 16 olabilir.

Paramtype* peType:

Çıktı: Paramtype tipi, tam olarak 16 değişken içeren bir dizi işaretçisi. İlk nParamCount girişleri uygun tip parametreler ile doldurulur.

char* pInternalName:

Çıktı: İşlev Sihirbazı'nda görüntülendiği gibi, Kullanıcı tarafından görülen işlev ismi. Harfler üzerinde çift noktalar bulunabilir.

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:

Girdi: Kütüphanedeki işlevin numarası; 0 ve nCount-1 arasında olabilir (in1, in2, ...).

USHORT& nParam:

Girdi: Hangi parametre için açıklamanın mevcut olduğunu gösterir; 1 ile başlayan parametrelerde, eğer nParam 0 ise, açıklamanın pDesc ile sağlandığı umulur; bu durumda, pName herhangi bir anlama sahip değildir.

char* pName:

Çıktı: parametre ismini veya tipini alır, örneğin, "Number" veya "String" veya "Date", ve bunun gibi. LibreOffice Calc ile char[256] uygulanır (256 karakter).

char* pDesc:

Çıktı: Parametre için açıklamaları alır, örneğin, " Evrende var olan değer hesaplanmalıdır". LibreOffice Calc'a uygulanması char[256] (256 bayt karakter).

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:

Konum | İ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:

Konum | İ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:

Konum | İ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