Add-in de programmation de LibreOffice Calc
La méthode décrite ci-après pour l'extension de Calc via des add-ins n'est pas à jour. Pour assurer la compatibilité avec les add-ins existants, les interfaces restent valides et sont toujours prises en charge, mais la programmation d'add-ins supplémentaires requiert l'utilisation des nouvelles fonctions API.
LibreOffice Calc peut être étendu grâce à des add-ins : il s'agit de modules de programmation externes fournissant des fonctions complémentaires pour l'utilisation des classeurs. Ils sont répertoriés dans l'assistant Fonctions, dans la catégorie Add-in. Si vous souhaitez programmer vous-même un add-in, vous trouverez ici des informations sur les fonctions devant être exportées par la bibliothèque partagée externe DLL pour que l'add-in puisse être joint correctement.
LibreOffice recherche dans le dossier Add-in définit dans la configuration une bibliothèque partagée DLL appropriée. Pour être reconnue par LibreOffice, la bibliothèque partagée DLL doit posséder certaines propriétés, comme expliqué ci-dessous. Grâce à ces informations, vous pourrez programmer votre propre add-in pour l'assistant Fonctions de LibreOffice Calc.
Concept de l'add-In
Chaque bibliothèque Add-In propose plusieurs fonctions. Certaines fonctions sont utilisées à des fins administratives. Dans la plupart des cas, vous pouvez donner le nom de votre choix à vos propres fonctions. Cependant, celles-ci doivent suivre certaines règles concernant la transmission des paramètres. Les conventions de nommage et d'appel varient en fonction des plates-formes.
Fonctions de la bibliothèque partagée DLL d'add-in
Dans tous les cas, les fonctions administratives GetFunctionCount et GetFunctionData doivent exister. Ces dernières permettent de déterminer les fonctions ainsi que les types de paramètres et les valeurs de retour. Les types Double et Chaîne sont supportés pour les valeurs de retour. Pour les paramètres, les plages de cellules Double Array, String Array et Cell Array sont également supportées.
Les paramètres sont transmis par référence. Il est donc possible de modifier les valeurs. Ceci n'est cependant pas pris en charge par LibreOffice Calc car sans intérêt au niveau d'un tableur.
Les bibliothèques peuvent être rechargées pendant l'exécution et les fonctions administratives peuvent en analyser le contenu. Des informations vous sont fournies pour chaque fonction : nombre et type de paramètres, noms de fonctions internes et externes et numéro administratif.
Le lancement des fonctions s'effectue de manière synchronisée et donne le résultat immédiatement. Il est également possible de lancer des fonctions en temps réel (fonctions asynchrones) mais en raison de leur complexité elles ne peuvent pas être présentées ultérieurement.
Généralités à propos de l'interface
16 est le nombre maximal de paramètres que peut contenir une fonction add-in liée à LibreOffice Calc : une valeur de retour et jusqu'à 15 paramètres de saisie de fonction.
Les types de données sont définies de la manière suivante :
Type de données |
Définition |
CALLTYPE |
sous Windows : FAR PASCAL (_far _pascal) sinon : par défaut (données par défaut spécifiques au système d'exploitation) |
USHORT |
Entier sans signe de 2 octets |
DOUBLE |
Format dépendant de la plateforme occupant 8 octets |
Paramtype |
Dépendant de la plate-forme comme entier PTR_DOUBLE =0 pointeur sur un double PTR_STRING =1 pointeur sur une chaîne de caractère qui se termine par zéro PTR_DOUBLE_ARR =2 pointeur sur une matrice double PTR_DOUBLE_ARR =3 pointeur sur une matrice de chaîne PTR_DOUBLE_ARR =4 pointeur sur une matrice de cellule AUCUN =5 |
fonctions Bibliothèque partagée DLL
Vous trouverez ci-après une description de ces fonctions, appelées par la bibliothèque partagée DLL externe.
Les règles suivantes s'appliquent à toutes les fonctions de bibliothèque partagéeDLL :
void CALLTYPE fn(out, in1, in2, ...)
Résultat : valeur résultante
Saisie : n'importe quel nombre de types (double&, car*, double*, car**, plage de cellules), où plage de cellules est une matrice de type double, chaîne ou cellule.
GetFunctionCount()
Indique le nombre de fonctions sans les fonctions de gestion dans le paramètre de référence. À chaque fonction est associé un numéro unique compris entre 0 et nCount-1. Ce numéro est utilisé ultérieurement pour les fonctions GetFunctionData et GetParameterDescription.
Syntaxe
void CALLTYPE GetFunctionCount(USHORT& nCount)
Paramètre
USHORT &nCount:
Résultat : référence une variable qui est supposée contenir le nombre de fonctions Add-in. Par exemple : si l'Add-In fournit 5 fonctions à LibreOffice Calc, on a donc nCount=5.
GetFunctionData()
Détermine toutes les informations importantes relatives à une fonction Add-In.
Syntaxe
void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)
Paramètre
USHORT& nNo:
Entrée : numéro de fonction compris entre 0 et nCount-1 compris.
char* pFuncName:
Sortie : noms de fonction tels qu'ils sont vus par le programmeur et tels qu'indiqués dans la bibliothèque partagéeDLL. Ce nom n'a pas d'influence sur celui utilisé dans l'assistant Fonctions.
USHORT& nParamCount:
Résultat : nombre de paramètres de la fonction AddIn. Ce nombre doit être supérieur à 0 puisqu'il existe toujours un code de sortie dont la valeur maximale est égale à 16.
Paramtype* peType:
Résultat : pointeur sur une matrice présentant exactement 16 variables de type Paramtype. Les premières entrées nParamCount sont complétées avec le type du paramètre correspondant.
char* pInternalName:
Sortie : nom de fonction tel qu'il est visualisé par l'utilisateur et tel qu'il s'affiche dans l'assistant Fonctions. Peut contenir des trémas.
Les paramètres pFuncName et pInternalName sont des matrices de caractères implémentées dans LibreOffice Calc avec la taille 256.
GetParameterDescription()
Fournit une brève description de la fonction Add-In et de ses paramètres. En option, cette fonction peut être utilisée pour afficher la description d'une fonction et de ses paramètres dans l'assistant Fonctions.
Syntaxe
void CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)
Paramètre
USHORT& nNo:
Entrée : numéro de la fonction compris entre 0 et nCount-1 dans la bibliothèque.
USHORT& nParam:
Entrée : indique pour quel paramètre la description est nécessaire, les paramètres commencent par 1. Si nParam commence par 0, la description de la fonction doit être dans pDesc et pName est dans ce cas inutile.
char* pName:
Résultat : ajoute le nom ou le type de paramètre, par exemple le mot "Nombre" ou "Chaîne de caractères" ou "Date" ou autre. Est défini dans LibreOffice Calc sous la forme char[256].
char* pDesc:
Résultat : ajoute la description du paramètre, par exemple "Valeur pour laquelle la somme doit être calculée". Implémentée dans LibreOffice sous la forme char[256].
Disponibles dans LibreOffice Calc, les matrices de caractères pName et pDesc comportent 256 caractères. Notez que l'espace disponible dans l'assistant Fonctions est limité et que vous ne pourrez pas entièrement utiliser ces 256 caractères.
Plages de cellules
Les tableaux qui suivent vous renseignent sur les structures de données qu'un module de programme externe doit avoir pour permettre la soumission de plages de cellules. Pour chaque type de données, LibreOffice Calc distingue trois matrices.
Matrice double
Vous pouvez appliquer une plage de cellules ayant des valeurs du type Nombre/Double en guise de paramètre. La définition d'une matrice double s'effectue de la manière suivante dans LibreOffice Calc :
Offset |
A |
Description |
0 |
Col1 |
Numéro de colonne du coin supérieur gauche de la plage de cellules. La numérotation commence par 0. |
2 |
Ligne1 |
Numéro de ligne du coin supérieur gauche de la plage de cellules, numérotation à partir de 0. |
4 |
Tab1 |
Numéro de table du coin supérieur gauche de la plage de cellules ; la numérotation démarre à 0. |
6 |
Col2 |
Numéro de colonne du coin inférieur droit de la plage de cellules. La numérotation démarre à 0. |
8 |
Ligne2 |
Numéro de ligne du coin inférieur droit de la plage de cellules ; la numérotation démarre à 0. |
10 |
Tab2 |
Numéro de table du coin inférieur droit de la plage de cellules, numérotation à partir de 0. |
12 |
Nombre |
Nombre des éléments suivants. Les cellules vides ne sont ni prises en compte ni passées. |
14 |
Col |
Numéro de colonne de l'élément. La numérotation commence par 0. |
16 |
Ligne |
Numéro de ligne de l'élément ; la numérotation démarre à 0. |
18 |
Tab |
Numéro de table de l'élément ; la numérotation démarre à 0. |
20 |
Erreur |
Numéro d'erreur où la valeur 0 vaut pour "Aucune erreur". Si l'élément provient d'une cellule de formule, la valeur de l'erreur est déterminée via la formule. |
22 |
Valeur |
Variable IEEE de type Double/Virgule flottante de 8 octets |
30 |
... |
Élément suivant |
Matrice de chaîne
Une plage de cellules qui comprend des valeurs de type Texte, est soumise en tant que matrice de chaîne. La définition d'une matrice de chaîne s'effectue de la manière suivante dans LibreOffice Calc :
Décalage |
Nom |
Description |
0 |
Col1 |
Numéro de colonne du coin supérieur gauche de la plage de cellules. La numérotation commence par 0. |
2 |
Ligne1 |
Numéro de ligne du coin supérieur gauche de la plage de cellules ; la numérotation démarre à 0. |
4 |
Tab1 |
Numéro de table du coin supérieur gauche de la plage de cellules ; la numérotation démarre à 0. |
6 |
Col2 |
Numéro de colonne du coin inférieur droit de la plage de cellules. La numérotation commence à 0. |
8 |
Ligne2 |
Numéro de ligne du coin inférieur droit de la plage de cellules ; la numérotation démarre à 0. |
10 |
Tab2 |
Numéro de table du coin inférieur droit de la plage de cellules ; la numérotation démarre à 0. |
12 |
Nombre |
Nombre des éléments suivants. Les cellules vides ne sont ni prises en compte ni soumises. |
14 |
Col |
Numéro de colonne de l'élément. La numérotation commence par 0. |
16 |
Ligne |
Numéro de ligne de l'élément ; la numérotation démarre à 0. |
18 |
Tab |
Numéro de table de l'élément ; la numérotation démarre à 0. |
20 |
Erreur |
Numéro d'erreur où la valeur 0 vaut pour "Aucune erreur". Si l'élément provient d'une cellule de formule, la valeur de l'erreur est déterminée via la formule. |
22 |
Len |
Longueur de la chaîne suivante, y compris l'octet de fin. Lorsque la longueur y compris l'octet de fin ne renvoie pas à une valeur exacte, un deuxième octet nul est inséré à la chaîne afin d'obtenir une valeur précise. Len se calcule via ((StrLen+2)&~1). |
24 |
Chaîne |
Chaîne se terminant par 0 octet |
24+Len |
... |
Élément suivant |
Matrice de cellule
Les matrices de cellules sont utilisées pour appeler des plages de cellules contenant aussi bien du texte que des nombres. Dans LibreOffice Calc, une matrice de cellules est définie comme suit :
Décaler |
Nom |
Description |
0 |
Col1 |
Numéro de colonne du coin supérieur gauche de la plage de cellules. La numérotation commence par 0. |
2 |
Ligne1 |
Numéro de ligne au coin supérieur gauche de la plage de cellules, la numérotation commence par 0. |
4 |
Tab1 |
Numéro de table au coin supérieur gauche de la plage de cellules, la numérotation commence par 0. |
6 |
Col2 |
Numéro de colonne au coin inférieur droit de la plage de cellules. La numérotation commence par 0. |
8 |
Ligne2 |
Numéro de ligne au coin inférieur droit de la plage de cellules, la numérotation commence 0. |
10 |
Tab2 |
Numéro de table au coin inférieur droit de la plage de cellules, la numérotation commence par 0. |
12 |
Nombre |
Nombre des éléments suivants. Les cellules vides ne sont ni comptées ni soumises. |
14 |
Col |
Numéro de colonne de l'élément. La numérotation commence par 0. |
16 |
Ligne |
Numéro de ligne de l'élément, la numérotation commence par 0. |
18 |
Tab |
Numéro de table de l'élément, la numérotation commence par 0. |
20 |
Erreur |
Numéro d'erreur où la valeur 0 vaut pour "Aucune erreur". Si l'élément provient d'une cellule de formule, la valeur de l'erreur est déterminée via la formule. |
22 |
Type |
Type de contenu de cellule, 0 == double, 1 == chaîne |
24 |
Valeur or Nbcar |
Si Type == 0 : variable IEEE de type double/virgule flottante de 8 octets Si Type == 1 : longueur de la chaîne suivante, y compris l'octet de fin. Lorsque la longueur y compris l'octet de fin ne renvoie pas à une valeur exacte, un deuxième octet nul est inséré à la chaîne afin d'obtenir une valeur précise. Nbcar se calcule via ((StrLen+2)&~1). |
26 if Type==1 |
Chaîne |
Si Type == 1 : chaîne se terminant par 0 |
32 ou 26+Nbcar |
... |
Élément suivant |