Je suis coincé sur quelque chose de basique. Comment passer des arguments à une fonction personnalisée Google Sheets.
J'ai une fonction dans l'éditeur de code Apps Script définie comme:
function usageByMonth(range,theDate) {
[ do something with the arguments passed ]
}
Dans ma feuille Google, la fonction est utilisée comme
=usageByMonth('Source Meter Readings'!A5:A,B1)
En essayant de déboguer la fonction, je trouve que les deux arguments sont "non définis". J'ai regardé de nombreux articles et même copié des fonctions directement à partir des exemples avec le même résultat.
L'exécution d'une fonction à partir de l'éditeur de code ne récupère pas les arguments. Dans cette situation, les arguments seront toujours indéfinis. Cela est également vrai pour des situations telles que l'utilisation du déclencheur simple onEdit()
. La seule façon d'obtenir les arguments transmis à la fonction consiste à entrer une fonction personnalisée valide dans la cellule de la feuille de calcul.
Si vous souhaitez tester le code d'une fonction personnalisée à partir de l'éditeur de code, vous devez "coder en dur" les valeurs des arguments.
De plus, Logger.log()
n'enregistrera rien dans le journal lorsqu'une fonction personnalisée est calculée dans la feuille.
Commencez avec une fonction personnalisée simple qui fonctionne, et tirez parti de cela.
Si vous souhaitez passer une plage dans le code de la fonction personnalisée, vous devez comprendre ce qu'est un tableau à deux dimensions:
[ [inner Array One], [inner Array Two], [etc] ]
Les données d'une plage sont placées dans un tableau à deux dimensions. Il y a UN tableau extérieur, avec des tableaux intérieurs. Les tableaux internes ont autant d'éléments que le nombre de colonnes de la plage.
[ ['single value from first column', 'single value second column'] ]
Le tableau 2D ci-dessus est pour une seule ligne avec deux colonnes.
Donc, pour créer une fonction personnalisée simple comme test, créez une fonction:
function myCustomFunction(argOne) {
return argOne[0][0];
};
Si la plage était A1: B5, la fonction personnalisée renverra la valeur dans A1;
=myCustomFunction(A1:B5)
La seule façon de savoir avec certitude, si votre argument a été transmis à la fonction serveur .gs, est de récupérer un résultat.
Il y a des entrées que vous ne pouvez pas utiliser. Si vous utilisez une entrée non autorisée, alors (pour citer la documentation):
Si une fonction personnalisée essaie de renvoyer une valeur basée sur l'une de ces fonctions intégrées volatiles, elle affichera Loading ... indéfiniment.
Par exemple, vous ne pouvez pas utiliser NOW () ou Rand () comme argument.
Le délimiteur d'argument de fonction dépend des paramètres régionaux de la feuille de calcul. Si les paramètres régionaux de la feuille de calcul utilisent une virgule comme délimiteur décimal, le délimiteur d'argument est un point-virgule:
=usageByMonth('Source Meter Readings'!A5:A; B1)
Sinon, il serait impossible de passer des décimales en fonctions.
Ce pourrait être le A5:A
plage, essayez A5:A1000
ou A:A
. Mélanger une adresse de cellule A5
avec une adresse de colonne A
confond probablement l'API.