Ajouter un déclencheur de script à Google Sheet qui fonctionnera dans l'application mobile Android

13

J'ai une feuille Google qui comprend un script qui doit être exécuté lorsque vous cliquez sur un bouton. La méthode recommandée pour ce faire (pour autant que je sache) est d'insérer une image, puis de joindre un script à l'image en question.

Cela fonctionne très bien tant que j'ouvre la feuille sur mon bureau. Cependant, si j'ouvre la feuille dans l'application Android Google Sheet, l'image n'apparaît tout simplement pas. Pour autant que je sache, ce (manque de) comportement n'est documenté nulle part, mais j'ai trouvé un certain nombre de personnes ayant le même problème.

Je me demandais comment contourner ce problème. Ai-je oublié quelque chose d'évident qui rendra mes images visibles dans l'application Android? Ou existe-t-il un autre moyen simple d'ajouter un déclencheur de script à une feuille qui fonctionnera sur mobile?

Probaton
la source
2
C'est vraiment un problème avec l'application Sheets native pour Android, n'est-ce pas? Votre question est probablement mieux lotie chez les amateurs d'Android .
ale
1
@Ale. C'est une façon de voir les choses, mais pour surmonter le problème, il faut la connaissance de Google Sheets, pas la connaissance d'Android.
@Normal: C'est pourquoi j'ai posé la question (et je n'ai pas voté pour fermer). J'essaie juste d'aider l'Asker à attirer l'expert (ise) nécessaire pour obtenir une réponse.
ale

Réponses:

26

Il semble que ni les images ni les éléments de menu personnalisés ne fonctionnent actuellement dans l'application Sheets Android. Je suggère de créer un "menu de fonctions" dans la feuille de calcul. Par exemple:

  1. La cellule A1 indique "Sélectionnez une fonction"
  2. La cellule B1 a une règle de validation des données qui limite le contenu aux noms des fonctions dont vous disposez. Dans mon exemple, ce sont "insertSomething" et "convertSomething". (Ne cochez pas «afficher l'aide» dans la boîte de dialogue de validation des données, la fenêtre contextuelle «aide» est une nuisance sur mobile.)
  3. Une fonction de script onEdit(simple déclencheur), exécutée à chaque édition, vérifie si le contenu de B1 a changé. Si c'est le cas, il exécute la fonction appropriée.

Voici mon code, avec deux fonctions incluses à des fins de démonstration:

function onEdit(e) {
  if (e.range.getA1Notation() == 'B1') {
    if (/^\w+$/.test(e.value)) {        
      this[e.value]();
      e.range.clear();
    }
  }
}

function insertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(2,3).setValue('inserted something');
}  

function convertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(3,3).setValue('converted something');
}  

La condition /^\w+$/.test(e.value)est juste de vérifier que nous avons une chaîne non vide et que nous n'exécutons pas de code malveillant que quelqu'un a mis en quelque sorte dans la cellule B1. Une fois la fonction invoquée avec this[e.value]();( thisfait référence à l'objet global et contient les noms de fonction), le contenu de B1 est effacé. On peut choisir d'exécuter à nouveau la même fonction, ou une autre.

À titre de preuve de concept, voici des captures d'écran de l'application. Capture d'écran 1: sélection d'une fonction

choisir

Capture d'écran 2: après l'exécution de la fonction

après

Références

Le maître
la source
1
Cela fonctionne tant que la fonction appelée n'est pas utilisée pour envoyer un e-mail. Les e-mails ne peuvent pas être déclenchés par un écouteur d'édition, donc le problème des boutons / menus personnalisés est vraiment limitant.
10klines
2
@ 10klines Dans ce cas, remplacez le onEditdéclencheur simple par un déclencheur installable, qui s'exécute avec l'autorisation de l'utilisateur qui a installé le déclencheur.
Si vous le souhaitez, vous pouvez utiliser des cases à cocher pour déclencher des fonctions à la place des images ou de la validation des données. Avec ma tablette, la fonction eval ne fonctionnait pas, j'ai donc défini un tas de cases à cocher pour chaque fonction. J'ai ajusté le code en conséquence et fonctionne bien. Astuce: si vous avez une tablette, n'utilisez pas la boîte de message - ne fonctionne pas pour une raison quelconque.
Tobias Sarnow
C'est une bonne solution, mais cela ne fonctionne pas si la fonction est appelée pour passer des appels à l'API et en obtenir la réponse car elle demande l'approbation de Google. Des travaux?
JB
1
@JB Utilisez le déclencheur Edit installable
TheMaster