Aggiungi un trigger di script a Google Sheet che funzionerà nell'app per dispositivi mobili Android


13

Ho un foglio di Google che include uno script che dovrebbe essere eseguito quando si fa clic su un pulsante. Il modo consigliato per farlo (per quanto ne so) è inserire un'immagine e quindi allegare uno script all'immagine in questione.

Funziona bene fintanto che apro il foglio sul mio desktop. Tuttavia, se apro il foglio nell'app per fogli Google Android, l'immagine semplicemente non viene visualizzata. Per quanto ne so questo comportamento (mancanza di) non è documentato da nessuna parte, ma ho trovato un numero di persone con lo stesso problema.

Mi chiedevo come aggirare questo problema. Mi sono perso qualcosa di ovvio che renderà visibili le mie immagini nell'app per Android? Oppure c'è un altro modo semplice per aggiungere un trigger di script a un foglio che funzionerà su dispositivi mobili?


2
Questo è davvero un problema con l'app Fogli nativa per Android, non è vero? La tua domanda è probabilmente migliore per gli appassionati di Android .
Ale

1
@Ale. Questo è un modo per esaminarlo, ma per superare il problema è necessaria la conoscenza di Fogli Google, non la conoscenza di Android.

@Normal: ecco perché ho posto la domanda (e non ho votato per chiudere). Sto solo cercando di aiutare l'Asker ad attirare l'esperto (ise) necessario per ottenere una risposta.
Ale

Risposte:


26

Sembra che al momento non siano presenti immagini o voci di menu personalizzate nell'app Fogli Android. Suggerisco di creare un "menu funzioni" all'interno del foglio di calcolo. Per esempio:

  1. La cella A1 dice "Seleziona una funzione"
  2. La cella B1 ha una regola di convalida dei dati che limita il contenuto ai nomi delle funzioni che hai. Nel mio esempio, sono "insertSomething" e "convertSomething". (Non selezionare "mostra aiuto" nella finestra di dialogo di convalida dei dati, il popup "aiuto" è un fastidio sul cellulare.)
  3. Una funzione di script onEdit(trigger semplice), in esecuzione su ogni modifica, controlla se il contenuto di B1 è cambiato. In tal caso, esegue la funzione appropriata.

Ecco il mio codice, con due funzioni incluse a scopo dimostrativo:

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 condizione /^\w+$/.test(e.value)è solo per verificare che abbiamo una stringa non vuota e non stiamo eseguendo codice dannoso che qualcuno ha in qualche modo inserito nella cella B1. Dopo che la funzione è stata invocata con this[e.value]();(si thisriferisce all'oggetto globale e contiene nomi di funzioni), il contenuto di B1 viene cancellato. Si può scegliere di eseguire di nuovo la stessa funzione o un'altra.

A riprova del concetto, ecco alcuni screenshot dell'app. Schermata 1: selezione di una funzione

scegliere

Schermata 2: dopo l'esecuzione della funzione

dopo

Riferimenti


1
Funziona finché la funzione chiamata non viene utilizzata per inviare un'e-mail. Le e-mail non possono essere attivate da un listener di modifica, quindi il problema del pulsante / menu personalizzato è davvero limitante.
10kline,

2
@ 10klines In tal caso, modificare il onEdittrigger semplice in un trigger installabile, che viene eseguito con l'autorizzazione dell'utente che ha installato il trigger.

Se lo desideri, puoi utilizzare le caselle di controllo per attivare le funzioni anziché le immagini o la convalida dei dati. Con il mio tablet la funzione eval non ha funzionato, quindi ho impostato una serie di caselle di controllo per ciascuna funzione. Ho modificato il codice di conseguenza e funziona bene. Suggerimento: se si dispone di un tablet, non utilizzare la finestra di messaggio - non funziona per qualche motivo.
Tobias Sarnow,

Questa è una buona soluzione, tuttavia non funziona se la funzione viene chiamata per effettuare chiamate all'API e ottenere la risposta da essa in quanto richiede l'approvazione di Google. Qualche soluzione?
JB

1
@JB Usa il trigger Edit installabile
TheMaster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.