Adicione um gatilho de script ao Google Sheet que funcione no aplicativo móvel Android

13

Eu tenho uma planilha do Google que inclui um script que deve ser executado ao clicar em um botão. A maneira recomendada de fazer isso (pelo que sei) é inserir uma imagem e anexar um script à imagem em questão.

Isso funciona muito bem, desde que abro a planilha na área de trabalho. No entanto, se eu abrir a planilha no aplicativo de planilhas do Google para Android, a imagem simplesmente não aparecerá. Tanto quanto posso dizer, esse comportamento (falta de) não está documentado em nenhum lugar, mas encontrei várias pessoas com o mesmo problema.

Fiquei me perguntando como contornar esse problema. Perdi algo óbvio que tornará minhas imagens visíveis no aplicativo Android? Ou existe outra maneira simples de adicionar um gatilho de script a uma planilha que funcione no celular?

Probaton
fonte
1
Este é realmente um problema com o aplicativo Sheets nativo para Android, não é? Sua dúvida provavelmente está melhor no Android Entusiastas .
ale
1
@AlE. Essa é uma maneira de analisar, mas para superar o problema, é necessário o conhecimento do Planilhas Google, não o conhecimento do Android.
@ Normal: foi por isso que fiz a pergunta (e não votei para fechar). Só estou tentando ajudar o Asker a atrair o especialista (ise) necessário para obter uma resposta.
ale

Respostas:

26

Atualmente, nem imagens nem itens de menu personalizados funcionam no aplicativo Planilhas Android. Sugiro a criação de um "menu de funções" dentro da planilha. Por exemplo:

  1. A célula A1 diz "Selecione uma função"
  2. A célula B1 possui uma regra de validação de dados que restringe o conteúdo aos nomes das funções que você possui. No meu exemplo, eles são "insertSomething" e "convertSomething". (Não marque "show help" na caixa de diálogo de validação de dados, o pop-up "help" é um aborrecimento no celular.)
  3. Uma função de script onEdit(acionador simples), executada em todas as edições, verifica se o conteúdo de B1 foi alterado. Nesse caso, ele executa a função apropriada.

Aqui está o meu código, com duas funções incluídas para fins de demonstração:

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

A condição /^\w+$/.test(e.value)é apenas verificar se temos uma sequência não vazia e não estamos executando código malicioso que alguém de alguma forma inseriu na célula B1. Depois que a função é chamada this[e.value]();( thisrefere-se ao objeto global e contém nomes de funções), o conteúdo de B1 é limpo. Pode-se optar por executar a mesma função novamente ou outra.

Como prova de conceito, aqui estão as capturas de tela do aplicativo. Captura de tela 1: seleção de uma função

escolher

Captura de tela 2: após a execução da função

depois de

Referências

O mestre
fonte
Esta é uma solução muito simples, limpa e eficaz. Bem feito.
StephenH
Isso funciona desde que a função que está sendo chamada não seja usada para enviar um email. Os emails não podem ser acionados por um ouvinte de edição; portanto, o problema do botão / menu personalizado é realmente limitador.
10klines
2
@ 10klines Nesse caso, altere o onEditgatilho simples para um instalável, que é executado com a autorização do usuário que instalou o gatilho.
Se desejar, use caixas de seleção para acionar funções em vez de imagens ou validação de dados. Com o meu tablet, a função eval não funcionou, por isso defini várias caixas de seleção para cada função. Eu ajustei o código de acordo e funciona bem. Dica: se você tiver um tablet, não use o Message Box - não funciona por algum motivo.
precisa saber é o seguinte
Esta é uma boa solução, no entanto, não funcionará se a função for chamada para fazer chamadas para a API e obter a resposta dela, pois está solicitando a aprovação do Google. Alguma solução?
JB