Fügen Sie Google Sheet einen Skriptauslöser hinzu, der in der mobilen Android-App funktioniert


13

Ich habe ein Google-Blatt, das ein Skript enthält, das beim Klicken auf eine Schaltfläche ausgeführt werden soll. Der empfohlene Weg, dies zu tun (soweit ich das beurteilen kann), besteht darin, ein Bild einzufügen und dann ein Skript an das betreffende Bild anzuhängen.

Dies funktioniert einwandfrei, solange ich das Blatt auf meinem Desktop öffne. Wenn ich das Blatt jedoch in der Android-Google-Blatt-App öffne, wird das Bild einfach nicht angezeigt. Soweit ich das beurteilen kann, ist dieses (fehlende) Verhalten nirgendwo dokumentiert, aber ich habe eine Reihe von Personen mit dem gleichen Problem gefunden.

Ich habe mich gefragt, wie ich dieses Problem umgehen kann. Habe ich etwas Offensichtliches verpasst, das meine Bilder in der Android-App sichtbar macht? Oder gibt es eine andere einfache Möglichkeit, einem Blatt, das auf Mobilgeräten funktioniert, einen Skriptauslöser hinzuzufügen?


1
Dies ist wirklich ein Problem mit der nativen Sheets-App für Android, nicht wahr? Ihre Frage ist bei Android-Enthusiasten wahrscheinlich besser gestellt .
Ale

1
@Ale. Das ist eine Möglichkeit, es zu betrachten, aber um das Problem zu lösen, braucht man das Wissen von Google Sheets, nicht das Wissen von Android.

@Normal: Deshalb habe ich die Frage gestellt (und nicht für den Abschluss gestimmt). Ich versuche nur, dem Asker zu helfen, den Experten (ise) anzuziehen, der benötigt wird, um eine Antwort zu erhalten.
Ale

Antworten:


26

Es scheint, dass derzeit weder Bilder noch benutzerdefinierte Menüelemente in der Sheets Android-App funktionieren. Ich schlage vor, ein "Funktionsmenü" in der Tabelle zu erstellen. Zum Beispiel:

  1. Zelle A1 sagt "Funktion auswählen"
  2. Zelle B1 verfügt über eine Datenüberprüfungsregel, die den Inhalt auf die Namen der Funktionen beschränkt, über die Sie verfügen. In meinem Beispiel sind dies "insertSomething" und "convertSomething". (Aktivieren Sie im Dialogfeld "Datenüberprüfung" nicht "Hilfe anzeigen". Das Popup "Hilfe" ist auf Mobilgeräten ärgerlich.)
  3. Eine Skriptfunktion onEdit(einfacher Auslöser), die bei jeder Bearbeitung ausgeführt wird, prüft, ob sich der Inhalt von B1 geändert hat. In diesem Fall wird die entsprechende Funktion ausgeführt.

Hier ist mein Code mit zwei Funktionen zu Demonstrationszwecken:

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');
}  

Die Bedingung /^\w+$/.test(e.value)ist nur zu überprüfen, ob wir eine nicht leere Zeichenfolge haben und keinen schädlichen Code ausführen, den jemand irgendwie in Zelle B1 eingefügt hat. Nachdem die Funktion mit aufgerufen wurde this[e.value]();( thisbezieht sich auf das globale Objekt und enthält Funktionsnamen), wird der Inhalt von B1 gelöscht. Man kann wählen, ob dieselbe oder eine andere Funktion erneut ausgeführt werden soll.

Als Proof of Concept finden Sie hier Screenshots aus der App. Screenshot 1: Auswahl einer Funktion

wählen

Screenshot 2: Nachdem die Funktion ausgeführt wurde

nach

Verweise


Dies ist eine sehr einfache, saubere und effektive Lösung. Schön gemacht.
StephenH

Dies funktioniert so lange, wie die aufgerufene Funktion nicht zum Senden einer E-Mail verwendet wird. E-Mails können nicht von einem Bearbeitungs-Listener ausgelöst werden, daher ist das Problem mit Schaltflächen / benutzerdefinierten Menüs sehr einschränkend.
10klines

2
@ 10klines Ändern Sie in diesem Fall den einfachen onEditTrigger in einen installierbaren, der mit der Berechtigung des Benutzers ausgeführt wird, der den Trigger installiert hat.

Wenn Sie möchten, können Sie Kontrollkästchen verwenden, um Funktionen anstelle von Bildern oder Datenüberprüfung auszulösen. Bei meinem Tablet funktionierte die Auswertungsfunktion nicht, daher habe ich für jede Funktion eine Reihe von Kontrollkästchen aktiviert. Ich habe den Code entsprechend angepasst und funktioniert einwandfrei. Tipp: Wenn Sie ein Tablet haben, verwenden Sie Message Box nicht - funktioniert aus irgendeinem Grund nicht.
Tobias Sarnow

Dies ist eine nette Lösung, funktioniert jedoch nicht, wenn die Funktion aufgerufen wird, um Aufrufe an die API zu tätigen und die Antwort von dieser zu erhalten, da sie um die Genehmigung durch Google bittet. Irgendeine Arbeit herum?
JB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.