135 votes

Rafraîchir les données récupérées par une fonction personnalisée dans Google Sheet

J'ai écrit un script personnalisé pour Google Apps qui recevra un message d'erreur de la part de l'utilisateur. id et d'aller chercher des informations dans un service web (un prix).

J'utilise ce script dans une feuille de calcul, et cela fonctionne très bien. Mon problème est que ces prix changent, et que ma feuille de calcul n'est pas mise à jour.

Comment puis-je le forcer à réexécuter le script et à mettre à jour les cellules (sans passer manuellement par chaque cellule) ?

2voto

AvengingAB Points 49

En travaillant à partir du script de Lexi tel quel, cela ne semblait plus fonctionner avec les feuilles actuelles, mais si j'ajoute la variable fictive dans ma fonction comme paramètre (pas besoin de l'utiliser réellement à l'intérieur de la fonction), cela forcera effectivement google sheets à rafraîchir la page à nouveau.

Ainsi, une déclaration comme : function myFunction(firstParam,dummy) et ensuite l'appeler serait comme cela a été suggéré. Cela a fonctionné pour moi.

De même, si le fait qu'une variable aléatoire apparaisse sur toutes les feuilles que vous éditez constitue une nuisance, voici un remède facile à mettre en œuvre pour se limiter à une seule feuille :

function onEdit(e)
{
  e.source.getSheetByName('THESHEETNAME').getRange('J1').setValue(Math.random());
}

0voto

artildo Points 81

J'ai suivi ce vidéo , de 1:44 et cela a fonctionné pour moi.

Vous devez utiliser une fonction de mise à jour spécifique, initialiser une variable "heure actuelle" et transmettre cette variable mise à jour en permanence à votre fonction personnalisée. Ensuite, allez dans Triggers et configurez un déclencheur piloté par le temps "toutes les minutes" pour la fonction de mise à jour (ou choisissez un autre intervalle de temps pour les mises à jour).

Le code :

function update() {
  var dt = new Date();
  var ts = dt.toLocaleTimeString();
  var cellVal = '=CustomFunction("'+ ts + '")';
  SpreadsheetApp.getActiveSheet().getRange('A1').setValue(cellVal);
}

0voto

juzraai Points 3450

Aujourd'hui, j'ai résolu ce problème en

  1. en ajoutant un autre paramètre à ma fonction :

    function MY_FUNC(a, b, additional_param) { / ... / }

  2. ajouter une valeur à ce paramètre également, en référençant une cellule :

    =MY_FUNC("a", "b", A1)

  3. et de mettre une case à cocher dans la cellule référencée (A1).

Maintenant, il suffit d'un seul clic (sur la case à cocher) pour forcer le recalcul de ma fonction.

-5voto

Srik Points 7771

Si vous avez écrit une fonction personnalisée et que vous l'avez utilisée dans votre feuille de calcul comme formule, chaque fois que vous ouvrez la feuille de calcul ou qu'une cellule de référence est modifiée, la formule est recalculée.

Si vous voulez continuer à regarder la feuille de calcul et que vous souhaitez que ses valeurs changent, pensez à ajouter un déclencheur temporisé qui mettra à jour les cellules. En savoir plus sur les déclencheurs aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X