Générer automatiquement des métadonnées JSON pour des fonctions personnalisées
Si vous écrivez une fonction Excel personnalisée en JavaScript ou TypeScript, vous pouvez utiliser les balises JSDoc pour la détailler en ajoutant des informations supplémentaires. Nous fournissons un plug-in Webpack qui utilise ces balises JSDoc pour créer automatiquement le fichier de métadonnées JSON au moment de la génération. L’utilisation du plug-in vous évite de modifier manuellement le fichier de métadonnées JSON.
Importante
Notez que les fonctions personnalisées Excel sont disponibles sur les plateformes suivantes.
- Office sur le web
- Office pour Windows
- Abonnement Microsoft 365
- retail perpetual Office 2016 et versions ultérieures
- avec licence en volume avec licence perpétuelle Office 2021 et versions ultérieures
- Office sur Mac
Les fonctions personnalisées Excel ne sont actuellement pas prises en charge dans les éléments suivants :
- Office sur iPad
- versions perpétuelles avec licence en volume d’Office 2019 ou version antérieure sur Windows
CustomFunctionsMetadataPlugin
Le plug-in est CustomFunctionsMetadataPlugin. Pour l’installer et le configurer, procédez comme suit.
Notes
- L’outil peut être utilisé uniquement dans un projet NodeJS.
- Ces instructions supposent que votre projet utilise Webpack et que vous l’avez installé et configuré.
- Si votre projet de complément de fonction personnalisée est créé avec le générateur Yeoman pour les compléments Office, Webpack est installé et toutes ces étapes sont effectuées automatiquement, mais le cas échéant, vous devez effectuer manuellement les étapes décrites dans Plusieurs fichiers sources de fonctions personnalisées .
Ouvrez une invite de commandes ou un interpréteur de commandes bash et, à la racine du projet, exécutez
npm install custom-functions-metadata-plugin
.Ouvrez le fichier webpack.config.js et ajoutez la ligne suivante en haut :
const CustomFunctionsMetadataPlugin = require("custom-functions-metadata-plugin");
.Faites défiler jusqu’au
plugins
tableau et ajoutez le code suivant en haut du tableau. Modifiez le chemin d’accès et leinput
nom de fichier en fonction des besoins pour qu’ils correspondent à votre projet, mais laoutput
valeur doit être « functions.json ». Si vous utilisez TypeScript, utilisez le *.ts nom de fichier source, et non le fichier *.js transpilé.new CustomFunctionsMetadataPlugin({ output: "functions.json", input: "./src/functions/functions.js", }),
Plusieurs fichiers sources de fonction personnalisée
Si, et seulement si, vous avez organisé vos fonctions personnalisées en plusieurs fichiers sources, il existe des étapes supplémentaires.
Dans le fichier webpack.config.js, remplacez la valeur de chaîne de
input
par un tableau d’URL de chaîne qui pointent vers chacun des fichiers. Voici un exemple :new CustomFunctionsMetadataPlugin({ output: "functions.json", input: [ "./src/functions/someFunctions.js", "./src/functions/otherFunctions.js" ], }),
Faites défiler jusqu’à la
entry.functions
propriété et remplacez sa valeur par le même tableau que celui utilisé à l’étape précédente. Voici un exemple :entry: { polyfill: ["core-js/stable", "regenerator-runtime/runtime"], taskpane: ["./src/taskpane/taskpane.js", "./src/taskpane/taskpane.html"], functions: [ "./src/functions/someFunctions.js", "./src/functions/otherFunctions.js" ], },
Exécuter l’outil
Vous n’avez rien à faire pour exécuter l’outil. Lorsque Webpack s’exécute, il crée le fichier functions.json et le place en mémoire en mode développement, ou dans le dossier /dist en mode production.
Notions de base des balises JSDoc
Ajoutez la balise @customfunction
dans les commentaires du code d’une fonction JavaScript ou TypeScript pour indiquer qu’il s’agit d’une fonction personnalisée.
Vous pouvez fournir les types de paramètres de la fonction en utilisant la balise@paramdans JavaScript, ou en précisant le type de fonction dans TypeScript. Si vous voulez en savoir plus, veuillez consulter les sections relatives à la balise@param et aux sectionstypes.
Ajouter une description à une fonction
La description s’affiche pour l’utilisateur sous forme de texte d’aide lorsqu’il a besoin d’aide pour comprendre le rôle de votre fonction personnalisée. La description ne nécessite aucune balise spécifique. Il vous suffit d’entrer une brève description dans le commentaire JSDoc. En général, la description est placée au début de la section commentaires JSDoc, mais elle fonctionnera peu importe son emplacement.
Pour consulter des exemples de descriptions de fonction intégrées, ouvrez Excel, accédez à l’ongletformules , puis sélectionnez insérer une fonction. Vous pouvez ensuite parcourir toutes les descriptions de fonction et voir vos propres fonctions personnalisées répertoriées.
Dans l’exemple suivant, l’expression « Calcule le volume d’une sphère » est la description de la fonction personnalisée.
/**
/* Calculates the volume of a sphere.
/* @customfunction VOLUME
...
*/
Balises JSDoc prises en charge
Les balises JSDoc suivantes sont prises en charge dans les fonctions personnalisées Excel.
- @ annulable
- nom del’ID @customfunction
- URL @helpurl
- @param{type}description du nom
- @requièreuneadresse
- @requiresParameterAddresses
- @returns{type}
- @diffusionencontinu
- @volatile
@cancelable
Indique qu’une fonction personnalisée effectue une action lorsque la fonction est annulée.
Le dernier paramètre de la fonction doit être de type CustomFunctions.CancelableInvocation
. La fonction peut affecter une fonction à la oncanceled
propriété pour indiquer le résultat lorsque la fonction est annulée.
Si le dernier paramètre de fonction est de type CustomFunctions.CancelableInvocation
, il sera considéré comme @cancelable
, même si la balise n’apparaît pas.
Une fonction ne peut pas contenir les deux balises @cancelable
et @streaming
.
@customfunction
Syntaxe : @customfunctionnomde l’id
Cette balise indique que la fonction JavaScript/TypeScript est une fonction personnalisée Excel. Il est nécessaire de créer des métadonnées pour la fonction personnalisée.
L’exemple suivant illustre cette balise.
/**
* Increments a value once a second.
* @customfunction
* ...
*/
id
Identifie id
une fonction personnalisée.
- Si
id
n’est pas fourni, le nom de la fonction JavaScript/TypeScript est converti en majuscules, et les caractères rejetés sont supprimés. - Le
id
doit être unique pour toutes les fonctions personnalisées. - Les caractères autorisés sont limités à : A-Z, a-z, 0-9, traits de soulignement (_) et point (.).
Dans l’exemple suivant, Increments correspond à l’id
et au name
de la fonction.
/**
* Increments a value once a second.
* @customfunction INCREMENT
* ...
*/
name
Fournit le nom d’affichage name
de la fonction personnalisée.
- Si aucun nom n’est fourni, l’id servira aussi de nom.
- Caractères autorisés : lettres caractère alphabétique Unicode, nombres, point (.) et trait de soulignement (_).
- Doit commencer par une lettre.
- Sa longueur maximale est limitée à 128 caractères.
Dans l’exemple suivant, INC correspond à l’id
de la fonction, tandis que increment
correspond au name
.
/**
* Increments a value once a second.
* @customfunction INC INCREMENT
* ...
*/
description
Une description s’affiche pour les utilisateurs dans Excel au fur et à mesure qu’ils entrent dans la fonction et spécifie ce que la fonction fait. Une description ne nécessite aucune balise spécifique. Ajoutez une description à une fonction personnalisée en ajoutant une expression pour décrire le rôle de la fonction dans le commentaire JSDoc. Par défaut, le texte non balisé dans la section commentaire JSDoc est la description de la fonction.
Dans l’exemple suivant, la phrase « A function that adds two numbers » (« Une fonction qui ajoute deux nombres ») est la description de la fonction personnalisée dont la propriété ID est ADD
.
/**
* A function that adds two numbers.
* @customfunction ADD
* ...
*/
@helpurl
Syntaxe : @helpurlURL
L’url fournie est affichée dans Excel.
Dans l’exemple suivant, est helpurl
http://www.contoso.com/weatherhelp
.
/**
* A function which streams the temperature in a town you specify.
* @customfunction getTemperature
* @helpurl http://www.contoso.com/weatherhelp
* ...
*/
@param
JavaScript
Syntaxe JavaScript : @paramdescription du nom {type}
-
{type}
spécifie les informations de type entre accolades. Consultez la section Types pour savoir quels types peuvent être utilisés. Si aucun type n’est spécifié, le typeany
par défaut est utilisé. -
name
spécifie le paramètre auquel la @param balise s’applique. Il est obligatoire. -
description
fournit la description qui s’affiche dans Excel pour le paramètre de la fonction. Elle est facultative.
Pour indiquer un paramètre de fonction personnalisé comme facultatif, placez des crochets autour du nom du paramètre. Par exemple : @param {string} [text] Optional text
.
Notes
La valeur par défaut pour les paramètres facultatifs est null
.
L’exemple suivant montre une fonction ADD qui ajoute deux ou trois nombres, avec le troisième nombre comme paramètre facultatif.
/**
* A function which sums two, or optionally three, numbers.
* @customfunction ADDNUMBERS
* @param firstNumber {number} First number to add.
* @param secondNumber {number} Second number to add.
* @param [thirdNumber] {number} Optional third number you wish to add.
* ...
*/
TypeScript
Syntaxe TypeScript : @paramdescriptiondu nom
-
name
spécifie le paramètre auquel la @param balise s’applique. Il est obligatoire. -
description
fournit la description qui s’affiche dans Excel pour le paramètre de la fonction. Elle est facultative.
Consultez la section Types pour savoir quels types de paramètres de fonction peuvent être utilisés.
Pour désigner un paramètre de fonction personnalisée comme étant facultatif, effectuez l’une des actions suivantes :
- Utilisez un paramètre facultatif. Par exemple :
function f(text?: string)
- Définissez ce paramètre sur une valeur par défaut. Par exemple :
function f(text: string = "abc")
Pour consulter une description détaillée du paramètre @param, reportez-vous à la page suivante : JSDoc (contenu en anglais)
Notes
La valeur par défaut pour les paramètres facultatifs est null
.
L’exemple suivant représente la fonction add
qui ajoute deux nombres.
/**
* Adds two numbers.
* @customfunction
* @param first First number
* @param second Second number
* @returns The sum of the two numbers.
*/
function add(first: number, second: number): number {
return first + second;
}
@requiresAddress
Indique que l’adresse de la cellule dans laquelle la fonction est évaluée doit être fournie.
Le dernier paramètre de fonction doit être de type CustomFunctions.Invocation
ou un type dérivé pour utiliser @requiresAddress
. Lorsque la fonction est appelée, la propriété address
contiendra l’adresse.
L’exemple suivant montre comment utiliser le invocation
paramètre en combinaison avec @requiresAddress
pour retourner l’adresse de la cellule qui a appelé votre fonction personnalisée. Pour plus d’informations, consultez Paramètre d’appel .
/**
* Return the address of the cell that invoked the custom function.
* @customfunction
* @param {number} first First parameter.
* @param {number} second Second parameter.
* @param {CustomFunctions.Invocation} invocation Invocation object.
* @requiresAddress
*/
function getAddress(first, second, invocation) {
const address = invocation.address;
return address;
}
@requiresParameterAddresses
Indique que la fonction doit retourner les adresses des paramètres d’entrée.
Le dernier paramètre de fonction doit être de type CustomFunctions.Invocation
ou un type dérivé pour utiliser @requiresParameterAddresses
. Le commentaire JSDoc doit également inclure une @returns
balise spécifiant que la valeur de retour est une matrice, telle que @returns {string[][]}
ou @returns {number[][]}
. Pour plus d’informations, consultez Types de matrices .
Lorsque la fonction est appelée, la parameterAddresses
propriété contient les adresses des paramètres d’entrée.
L’exemple suivant montre comment utiliser le invocation
paramètre en combinaison avec @requiresParameterAddresses
pour retourner les adresses de trois paramètres d’entrée. Pour plus d’informations, consultez Détecter l’adresse d’un paramètre .
/**
* Return the addresses of three parameters.
* @customfunction
* @param {string} firstParameter First parameter.
* @param {string} secondParameter Second parameter.
* @param {string} thirdParameter Third parameter.
* @param {CustomFunctions.Invocation} invocation Invocation object.
* @returns {string[][]} The addresses of the parameters, as a 2-dimensional array.
* @requiresParameterAddresses
*/
function getParameterAddresses(firstParameter, secondParameter, thirdParameter, invocation) {
const addresses = [
[invocation.parameterAddresses[0]],
[invocation.parameterAddresses[1]],
[invocation.parameterAddresses[2]]
];
return addresses;
}
@returns
Syntaxe : @returns {type}
Fournit le type pour la valeur renvoyée.
Si {type}
est omis, les informations de type TypeScript seront utilisées. S’il n’existe aucune information définissant le type, ce dernier sera any
.
L’exemple suivant représente la fonction add
qui utilise la balise @returns
.
/**
* Adds two numbers.
* @customfunction
* @param first First number
* @param second Second number
* @returns The sum of the two numbers.
*/
function add(first: number, second: number): number {
return first + second;
}
@streaming
Utilisé pour indiquer qu’une fonction personnalisée est une fonction diffusion en continu.
Le dernier paramètre est de type CustomFunctions.StreamingInvocation<ResultType>
.
La fonction retourne void
.
Les fonctions de streaming ne retournent pas de valeurs directement, mais elles appellent setResult(result: ResultType)
à l’aide du dernier paramètre.
Les exceptions levées par une fonction en continu sont ignorées.
setResult()
peut être appelée avec Error pour indiquer un résultat erroné. Si vous souhaitez consulter un exemple de fonction de diffusion en continu et obtenir d’autres informations, veuillez vous reporter à la section Créer une fonction de diffusion en continu.
Les fonctions de diffusion en continu ne peuvent pas être marquées comme étant @volatile.
@volatile
Une fonction volatile est une fonction dont le résultat peut changer d’un moment à l’autre, même si elle ne récupère pas d’argument ou si ses arguments ne changent pas. À chaque calcul, Excel réévalue les cellules contenant des fonctions volatiles, ainsi que toutes leurs cellules dépendantes. C’est pourquoi, un trop grand nombre de dépendances de fonctions volatiles risque de ralentir les calculs. Nous vous recommandons d’en utiliser aussi peu que possible.
Les fonctions de diffusion en continu ne peuvent pas être volatiles.
La fonction suivante est volatile et utilise la balise @volatile
.
/**
* Simulates rolling a 6-sided die.
* @customfunction
* @volatile
*/
function roll6sided(): number {
return Math.floor(Math.random() * 6) + 1;
}
Types
En spécifiant un type de paramètre, Excel convertit les valeurs en ce type, avant d’appeler la fonction. Si le type est any
, Excel n’effectue pas de conversion.
Types de valeur
Une valeur unique peut être représentée à l’aide d’un des types suivants : boolean
, number
ou string
.
Type matrice
Utilisez une matrice à deux dimensions pour que le paramètre ou la valeur renvoyée soit une matrice de valeurs. Par exemple, le type number[][]
indique une matrice de nombres et string[][]
une matrice de chaînes.
Type d’erreur
Une fonction qui n’est pas une fonction de diffusion en continu peut indiquer une erreur en renvoyant un type Error.
Une fonction de diffusion en continu peut indiquer une erreur en appelantsetResult()
avec un type Error.
Promise
Une fonction personnalisée peut retourner une promesse qui fournit la valeur lorsque la promesse est résolue. Si la promesse est rejetée, la fonction personnalisée génère une erreur.
Autres types
Tout autre type sera traité comme une erreur.
Étapes suivantes
Découvrez le nommage et la localisation des fonctions personnalisées.