mardi 1 mai 2012

Transformer un Google Spreadsheet script en fonction

12 commentaires
Dans Excel lorsque l'on crée une macro il est possible de l’appeler en tant que fonction, il faut respecter quelques petits points mais cela peut être pratique si on a besoin d'une fonction un peu spéciale. Dans Google Spreadsheet on a les Scripts qui comme les macros permettent de se créer des programmes ou des routines en utilisant les données de la feuille de calcul et il est aussi possible de transformer un Google Script en fonction.
Idée originale trouvée sur le forum google docs dans cette conversation.
Comment faire ?
Il faut que le script effectue un calcul ou une transformation et retourne une valeur.
Dans le script il ne doit pas y avoir d'affichage de message ou ce genre de choses, il doit pouvoir fonctionner tout seul. A la fin il faut une condition "return" pour renvoyer la valeur de son calcul. Il faut renvoyer une seule valeur.

Des exemples
function mydate(){
  var date = new Date();
  return date;
}
function pluscinq(number){
  return (number + 5);
}
function mytext(ajout){
  return "Vous avez écrit : " + ajout;
}
Il faut copier/coller ces scripts dans l'éditeur de script, ensuite retournez dans la spreadsheet et dans une cellule tapez :
=mydate() cela retournera la date du jour
=pluscinq(50) le script retournera le chiffre +5 donc dans notre cas 55
=mytext("essai") le texte sera ajouté et la fonction retournera "Vous avez écrit : essai" 
Comme les fonctions natives on peut ajouter toutes sortes de paramètres en entrée, ils doivent être saisis en respectant les règles des fonctions de Google Spreadsheet.

Les limites
Il y a une sorte de cache sur les fonctions donc si on tape "=pluscinq(50)" et que l'on modifie la fonction pluscinq() elle ne se mettra pas à jour tout de suite. Si par exemple on vérifie la couleur d'une cellule avec notre fonction, si on modifie la couleur de la cellule du fait du cache, la fonction ne contrôlera pas tout de suite si la couleur a changé.
Le recalcul se fait à chaque ouverture du fichier ou alors après un délai de 5 à 10 minutes.
Pour forcer le recalcul on peut ajouter en paramètre une cellule, quand on modifie la cellule la fonction se recalcule. Ce n'est pas l'idéal mais cette astuce peut aider. Par exemple =mytext("essai";A1), quand on modifie A1 le recalcul s'effectue automatiquement.

Pour avoir d'autres exemples, des fonctions spéciales ont été développées sur le forum Google docs.

12 Responses so far

  1. Anonyme says:

    Il serait bien de citer vos sources, quand ce ne sont pas les vôtres.

  2. Anonyme says:

    Voir le lien qui prouve
    https://productforums.google.com/forum/#!searchin/docs-fr/compte$20cellule$20de$20couleur/docs-fr/cp2uZ0qZbx8/1C3nmrlSntYJ

  3. st3ph says:

    Bonjour,

    Merci pour cette précision. Je ne rentrerai pas dans cette discussion mais mon billet date du 1er Mai 2012 et le sujet sur le forum du 24 Septembre 2012.

    Soit j'ai des pouvoirs divinatoire pour anticiper un futur billet sur le forum et le copier avant qu'il soit écrit soit je l'ai écrit moi même.

    De toute façon dans ces deux billets rien n'a été inventé c'est juste une présentation d'une fonctionnalité native de google spreadsheet.

    Stéphane

  4. Anonyme says:

    L'intégrale de la discussion prouve bien que tu ne connaissais pas.
    Je refuse la nullité, c'est toi qui gère ton blog alors la date vaut ce quelle vaut
    Alors ce n'est pas l'honnêteté qui t'étouffe
    Un peu de courage et retourne lire le Post
    https://productforums.google.com/forum/#!searchin/docs-fr/compte$20cellule$20de$20couleur/docs-fr/cp2uZ0qZbx8/1C3nmrlSntYJ
    DomBau

  5. st3ph says:

    Fais un blog et expose tes scripts qu'est ce que tu veux que je te dise....

    Peut être que je l'ai découvert sur le forum par toi, oui mais l'article et la mise en forme, les limites et contraintes, les explications je ne pense pas que tout cela était disponible sur le forum.
    Est ce que parce que quelqu'un a parlé d'un sujet il ne faut plus jamais en parler ???

    Stéphane

  6. Anonyme says:

    Mon pauvre ami comme c'est petit.
    Et cela, tu n'en parles pas pourtant la solution est bonne.
    DomBau

  7. st3ph says:

    Pour montrer que je suis ouvert j'ai fait un lien en début de sujet vers le forum libre aux visiteurs de consulter le billet du forum.

  8. Anonyme says:

    Salut Stéphane,
    vérifie bien ce que tu racontes.
    C 'est peut être vrai que ton billet est du 01/05/2012, mais le sujet sur le forum est du 15/04/2012. Soit 15 jours avant.
    Je crains que se ne soit pas une démonstration d'ouverture mais plus une solution pour faire oublier ta mauvaise foi
    DomBau

  9. st3ph says:

    Je me suis rappelé l'origine de ce billet et oui c'était après nos tests sur le forum.
    Des tests que l'on a fait j'ai écrit ce billet pour montrer comment ça marche. Donc oui le billet sur le forum est la source de ce billet oui tu as évoqué ce sujet en premier.

    Je n’ai pas repris ta fonction j'ai fait un exemple sur des fonctions quelconques.

  10. Anonyme says:

    On s'en branle

  11. Anonyme says:

    En tout cas ton blog est une mine d'infos.
    Merci Stéphane
    Nico

Leave a Reply