Funções personalizadas no Planilhas Google (original) (raw)

As Planilhas Google oferecem centenas defunções integradas, comoAVERAGE, SUM eVLOOKUP. Quando isso não for suficiente para suas necessidades, use o Google Apps Script para escrever funções personalizadas, por exemplo, para converter metros em milhas ou buscar conteúdo ao vivo da Internet. Em seguida, use-as nas Planilhas Google como uma função integrada.

Primeiros passos

As funções personalizadas são criadas usando o JavaScript padrão. Se você não tem experiência com JavaScript, a Codecademy oferece umótimo curso para iniciantes. Observação: este curso não foi desenvolvido nem está associado ao Google.

Esta é uma função personalizada simples, chamada DOUBLE, que multiplica um valor de entrada por 2:

/**
 * Multiplies an input value by 2.
 * @param {number} input The number to double.
 * @return The input multiplied by 2.
 * @customfunction
*/
function DOUBLE(input) {
  return input * 2;
}

Se você não souber como escrever JavaScript e não tiver tempo para aprender,confira a loja de complementos para ver se outra pessoa já criou a função personalizada que você precisa.

Como criar uma função personalizada

Para escrever uma função personalizada:

  1. Crieou abra uma planilha no app Planilhas Google.
  2. Selecione o item de menu Extensões > Apps Script.
  3. Exclua qualquer código no editor de script. Para a função DOUBLE acima, basta copiar e colar o código no editor de script.
  4. Na parte superior, clique em Salvar .

Agora você pode usar a função personalizada.

Como acessar uma função personalizada do Google Workspace Marketplace

O Google Workspace Marketplace oferece várias funções personalizadas comocomplementos para as Planilhas Google. Para usar ou conferir estes complementos:

  1. Crieou abra uma planilha no app Planilhas Google.
  2. Na parte de cima, clique em Complementos > Instalar complementos.
  3. Quando o Google Workspace Marketplacefor aberto, clique na caixa de pesquisa no canto superior direito.
  4. Digite "função personalizada" e pressione Enter.
  5. Se você encontrar um complemento de função personalizada que lhe interessar, clique em Instalar para fazer a instalação.
  6. Uma caixa de diálogo pode informar que o complemento precisa de autorização. Se sim, leia o aviso com atenção e clique em Permitir.
  7. O complemento fica disponível na planilha. Para usar o complemento em uma planilha diferente, abra a outra e, na parte de cima, clique emComplementos > Gerenciar complementos. Encontre o complemento que você quer usar e clique em Opções > Usar neste documento.

Usar uma função personalizada

Depois de escrever uma função personalizada ou instalar uma do Google Workspace Marketplace, ela fica tão fácil de usar quanto uma função integrada:

  1. Clique na célula em que você quer usar a função.
  2. Digite um sinal de igual (=) seguido pelo nome da função e qualquer valor de entrada (por exemplo, =DOUBLE(A1)) e pressione Enter.
  3. A célula vai mostrar Loading... por um momento e depois retornar o resultado.

Diretrizes para funções personalizadas

Antes de escrever sua própria função personalizada, há algumas diretrizes que você precisa conhecer.

Nomeação

Além das convenções padrão para nomear funções JavaScript, observe o seguinte:

Argumentos

Assim como uma função integrada, uma função personalizada pode receber argumentos como valores de entrada:

Valores de retorno

Todas as funções personalizadas precisam retornar um valor para exibição, como:

Tipos de dados

O Google Planilhas armazena dados emformatos diferentes, dependendo da natureza deles. Quando esses valores são usados em funções personalizadas, o Apps Script os trata como o tipo de dados apropriado em JavaScript. Estas são as áreas mais comuns de confusão:

Preenchimento automático

O app Planilhas Google oferece suporte ao preenchimento automático para funções personalizadas, assim como parafunções integradas. Ao digitar o nome de uma função em uma célula, você vai ver uma lista de funções padrão e personalizadas que correspondem ao que você digitou.

As funções personalizadas vão aparecer nessa lista se o script incluir uma tag@customfunction do JsDoc, como no exemplo DOUBLE() abaixo.

/**
 * Multiplies the input value by 2.
 *
 * @param {number} input The value to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return input * 2;
}

Avançado

Como usar os serviços do Google Apps Script

As funções personalizadas podem chamar determinados serviços do Google Apps Script para realizar tarefas mais complexas. Por exemplo, uma função personalizada pode chamar o serviço Language para traduzir uma frase em inglês para o espanhol.

Ao contrário da maioria dos outros tipos de Apps Script, as funções personalizadas nunca pedem aos usuários que autorizem o acesso a dados pessoais. Consequentemente, eles só podem chamar serviços que não têm acesso a dados pessoais, especificamente os seguintes:

Serviços compatíveis Observações
Cache Funciona, mas não é muito útil em funções personalizadas
HTML Gera HTML, mas não o exibe (raramente útil)
JDBC
Idioma
Bloquear Funciona, mas não é muito útil em funções personalizadas
Maps Pode calcular rotas, mas não mostrar mapas
Propriedades getUserProperties() só recebe as propriedades do proprietário da planilha. Os editores de planilhas não podem definir propriedades do usuário em uma função personalizada.
Planilha Somente leitura (pode usar a maioria dos métodos get*(), mas não set*()). Não é possível abrir outras planilhas (SpreadsheetApp.openById() ou SpreadsheetApp.openByUrl()).
Busca de URL
Utilitários
XML

Se a função personalizada gerar a mensagem de erro You do not have permission to call X service., o serviço vai exigir a autorização do usuário e, portanto, não poderá ser usado em uma função personalizada.

Para usar um serviço diferente dos listados acima, crie ummenu personalizado que execute uma função do Apps Script em vez de escrever uma função personalizada. Uma função acionada por um menu vai pedir autorização ao usuário, se necessário, e poderá usar todos os serviços do Apps Script.

Compartilhamento

As funções personalizadas começam vinculadas à planilha em que foram criadas. Isso significa que uma função personalizada gravada em uma planilha não pode ser usada em outras, a menos que você use um dos seguintes métodos:

Otimização

Sempre que uma função personalizada é usada em uma planilha, o app Planilhas Google faz uma chamada separada para o servidor do Apps Script. Se a planilha tiver dezenas (ou centenas ou milhares!) de chamadas de função personalizadas, esse processo pode ser bastante lento. Alguns projetos com muitas funções personalizadas ou complexas podem ter um atraso temporário nas execuções.

Consequentemente, se você planeja usar uma função personalizada várias vezes em um grande intervalo de dados, modifique a função para que ela aceite um intervalo como entrada na forma de uma matriz bidimensional e retorne uma matriz bidimensional que pode transbordar para as células adequadas.

Por exemplo, a função DOUBLE() mostrada acima pode ser reescrita para aceitar uma única célula ou um intervalo de células da seguinte maneira:

/**
 * Multiplies the input value by 2.
 *
 * @param {number|Array<Array<number>>} input The value or range of cells
 *     to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return Array.isArray(input) ?
      input.map(row => row.map(cell => cell * 2)) :
      input * 2;
}

A abordagem acima usa o métodomap do objeto Array do JavaScript no método na matriz bidimensional de células para receber cada linha. Em seguida, para cada linha, ele usamap novamente para retornar o valor duplo de cada célula. Ele retorna uma matriz bidimensional que contém os resultados. Dessa forma, você pode chamar DOUBLEapenas uma vez, mas calcular um grande número de células de uma vez, conforme mostrado na captura de tela abaixo. Você pode fazer a mesma coisa com instruções if aninhadas em vez da chamada map.

Da mesma forma, a função personalizada abaixo busca conteúdo em tempo real da Internet e usa uma matriz bidimensional para mostrar duas colunas de resultados com apenas uma chamada de função. Se cada célula exigisse uma chamada de função própria, a operação levaria muito mais tempo, já que o servidor do Apps Script precisaria fazer o download e analisar o feed XML toda vez.

/**
 * Show the title and date for the first page of posts on the
 * Developer blog.
 *
 * @return Two columns of data representing posts on the
 *     Developer blog.
 * @customfunction
 */
function getBlogPosts() {
  var array = [];
  var url = 'https://gsuite-developers.googleblog.com/atom.xml';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
  var entries = document.getRootElement().getChildren('entry', atom);
  for (var i = 0; i < entries.length; i++) {
    var title = entries[i].getChild('title', atom).getText();
    var date = entries[i].getChild('published', atom).getValue();
    array.push([title, date]);
  }
  return array;
}

Essas técnicas podem ser aplicadas a quase qualquer função personalizada usada repetidamente em uma planilha, embora os detalhes da implementação variem dependendo do comportamento da função.