web-dev-qa-db-fra.com

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

J'ai une feuille de 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) consiste à insérer une image, puis à associer un script à l'image en question.

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

Je me demandais comment je contournerais ce problème. Ai-je oublié quelque chose d'évident qui rendrait 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?

10
Probaton

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 fonction" dans la feuille de calcul. Par exemple:

  1. La cellule A1 dit "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 que vous avez. Dans mon exemple, ils sont "insertSomething" et "convertSomething". (Ne cochez pas la case "Afficher l'aide" dans la boîte de dialogue de validation des données, la fenêtre "Aide" est un inconvénient pour le mobile.)
  3. Une fonction de script onEdit, 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)) {        
      eval(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 pour vérifier que nous avons une chaîne non vide et que nous n'exécutons pas de code malveillant que quelqu'un a en quelque sorte placé dans la cellule B1. Une fois que la fonction est envoi avec eval(e.value)();, le contenu de B1 est effacé. On peut choisir de relancer la même fonction ou une autre.

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

choose

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

after

24
user79865