Macros
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Comment lister les fonctions disponibles dans le tableur ?
On souhaite récupérer dans un tableau la liste des fonctions du tableur, y compris celles de la catégorie Add-In.
Nous utilisons pour cela le service FunctionDescriptions[1] qui renvoie cette collection. Les éléments retournés sont des structures dont les propriétés sont collectées dans le service FunctionDescription[2].
Ces propriétés sont :
Id | Identifiant unique |
Category | Catégorie[3] |
Name | Nom localisé (en français pour nous) |
Description | Description localisée |
Arguments | liste localisée des arguments de la fonction |
La procédure crée la liste des fonctions dans la première feuille du classeur, colonnes A à D.
- Nom
- Catégorie
- Arguments
- Description
La liste des arguments d'une fonction est une structure FunctionArgument[4].
Seule nous intéresse ici la propriété Name de cette structure, contenant le ou les arguments. Les fonctions n'ont pas toutes un argument : PI, VRAI, ALEA, etc. n'en utilisent pas par exemple. La procédure teste cela par la fonction ISEMPTY. Si la propriété n'est pas vide (il y a des arguments), une boucle sur ces derniers alimente une variable tableau provisoire qui sera ensuite "jointe" via l'instruction JOIN. Cette astuce permet d'insérer le séparateur ";" entre chaque argument.
La catégorie[3] nécessite également un traitement particulier car la propriété retournée par le service est de type long. Il s'agit de constantes FunctionCategory[5]. La traduction en chaîne de caractères est assurée par la fonction PysLibCateg.
Code de la macro :
sub PysListerFonctions
dim oFD as object, oFeuille as object, oUneF as object
dim oUnArg as new com.sun.star.sheet.FunctionArgument
dim i as long, j as long
dim sProv() as string
oFD = CreateUnoService("com.sun.star.sheet.FunctionDescriptions")
thiscomponent.lockcontrollers
oFeuille = thiscomponent.sheets.getByIndex(0)
oFeuille.getCellByPosition(0, 0).string = "Nom"
oFeuille.getCellByPosition(1, 0).string = "Catégorie"
oFeuille.getCellByPosition(2, 0).string = "Argument(s)"
oFeuille.getCellByPosition(3, 0).string = "Description"
oFeuille.getCellRangeByName("A1:D1").cellstyle= "Heading"
for i = 0 to oFD.getCount() - 1
oUneF = oFD.getByIndex(i)
oFeuille.getCellByPosition(0, i + 1).string = oUneF(2).value
oFeuille.getCellByPosition(1, i + 1).string = PysLibCateg(oUneF(1).value)
if not(isempty(oUneF(4).value)) then
redim sProv(ubound(oUneF(4).value))
for j = 0 to ubound(oUneF(4).value)
sProv(j) = oUneF(4).value(j).name
next j
oFeuille.getCellByPosition(2, i + 1).string = join(sProv(), ";")
end if
oFeuille.getCellByPosition(3, i + 1).string = oUneF(3).value
next i
thiscomponent.unlockcontrollers
msgbox "Terminé", 64, "Liste des fonctions"
end sub
function PysLibCateg(lNumCat as long) as string
dim sLibCat as string
sLibCat = "N/D"
select case lNumCat
case com.sun.star.sheet.FunctionCategory.DATABASE
sLibCat = "Base de données"
case com.sun.star.sheet.FunctionCategory.DATETIME
sLibCat = "Date&Heure"
case com.sun.star.sheet.FunctionCategory.FINANCIAL
sLibCat = "Finances"
case com.sun.star.sheet.FunctionCategory.INFORMATION
sLibCat = "Information"
case com.sun.star.sheet.FunctionCategory.LOGICAL
sLibCat = "Logique"
case com.sun.star.sheet.FunctionCategory.MATHEMATICAL
sLibCat = "Mathématique"
case com.sun.star.sheet.FunctionCategory.MATRIX
sLibCat = "Matrice"
case com.sun.star.sheet.FunctionCategory.STATISTICAL
sLibCat = "Statistique"
case com.sun.star.sheet.FunctionCategory.SPREADSHEET
sLibCat = "Classeur"
case com.sun.star.sheet.FunctionCategory.TEXT
sLibCat = "Texte"
case com.sun.star.sheet.FunctionCategory.ADDIN
sLibCat = "Add-in"
end select
PysLibCateg = sLibCat
end function
Télécharger le classeur exemple
Notes :
- ↑ Voir la documentation de l'API
- ↑ Voir la documentation de l'API
- ↑ 3.0 3.1 Il s'agit de la catégorie utilisée dans l'Assistant Fonctions ou la Liste des fonctions (menu ▸ ) pour regrouper les fonctions par type
- ↑ Voir la documentation de l'API
- ↑ Voir la documentation de l'API