2015-03-01 1 views
1

J'utilise Google Sheets pour calculer mes objectifs pour l'haltérophilie. Différents exercices sont basés sur différents pourcentages de mon score élevé pour chaque ascenseur. Je calculais le plan de chaque jour avec quelque chose comme "= CEILING ((0.8 * A3/5), 1) * 5" pour représenter 80% de tout ce qui était en A3, arrondi à quelque chose de divisible par cinq. Ce n'était pas maintenable.Comment puis-je modifier immédiatement une plage nommée dans google sheets?

Ce sur quoi je travaille maintenant utilise l'éditeur de script pour fournir des fonctions personnalisées. "= FIVES ('bench')" me donne ma progression de banc de presse pour cinq répétitions.

Cela fonctionne très bien, sauf lorsque je change des valeurs. J'ai mis une plage nommée sur chacun de mes ascenseurs maximum afin que je puisse appeler getRangeByName obtenir la valeur par nom au lieu de par des coordonnées de cellule. Mais les fonctions que j'ai faites ne sont plus appelées, donc je continue à voir des valeurs périmées, même après avoir rafraîchi la page.

J'ai trouvé un autre post suggérant que getRangeByName avait un second argument qui pourrait être mis à now() pour actualiser le cache maintenant. J'ai essayé et il semble que c'était démodé. Je n'ai trouvé aucune autre information sur une plage nommée étant mise en cache.

Comment puis-je dire à mon script qu'il doit être réexécuté lorsqu'une plage nommée est mise à jour? Y a-t-il une sorte d'observateur/auditeur/observateur dans les draps? Sinon, je suis ouvert aux techniques - les plages nommées étaient juste la première chose que j'ai rencontrée pour nommer mes variables.

Répondre

1

La mise en cache des scripts de Google n'allait jamais permettre que cela fonctionne sans manigances. L'attente est que foo('bar') sera déterministe, revenant toujours la même chose. Je passais le nom de la plage nommée, espérant que je pourrais utiliser getRangeByName et utiliser le nom comme étiquette. Au lieu de cela, j'utilise simplement la plage en tant qu'arg et en passant une seconde chaîne sous la forme d'une étiquette: foo(bar, "Bar label"). C'est un peu plus bavard, mais beaucoup moins que ce que j'essayais de tromper le serveur de script. Ne pas combattre le cadre, les gens.