🧠 O Poder do Google Sheets com Apps Script
Transforme sua planilha em um aplicativo poderoso, automatizando análises,
formatação condicional e fluxo de dados.
A seguir, apresento os capítulos 1 a 5 já redigidos com o mesmo nível de detalhe e estilo
editorial do eBook anterior (teoria + exemplos + boas práticas).
Depois que você confirmar, eu sigo do 6 ao 20 e monto o PDF com design moderno.
📘 Capítulo 1 — O Coração da Automação: O Apps Script e as Planilhas
O Google Apps Script (GAS) é o motor invisível por trás da automação do Google Sheets.
Ele é uma linguagem baseada em JavaScript, desenvolvida pelo próprio Google, e permite
que você expanda os limites do que uma planilha pode fazer.
Em vez de apenas armazenar dados, o Sheets se torna um aplicativo interativo e
inteligente.
🧩 Onde encontrar:
No menu do Google Sheets:
Extensões → Apps Script
Isso abrirá o editor do GAS, onde você pode escrever suas funções, salvar, testar e
executar scripts que interagem diretamente com a planilha.
💡 Exemplo prático:
function mostrarMensagem() {
[Link]().alert("Bem-vindo ao mundo do Apps
Script!");
}
Quando você executa essa função, uma caixa de diálogo aparece na sua planilha — o
primeiro passo rumo à automação.
📘 Capítulo 2 — A Tríade Sagrada: Spreadsheet, Sheet e Range
No coração do GAS para o Sheets está uma hierarquia que todo desenvolvedor precisa
dominar:
1. Spreadsheet → o arquivo inteiro (a planilha .xlsx/.gsheet)
2. Sheet → cada aba individual dentro do arquivo
3. Range → uma ou mais células dentro de uma aba
Essa estrutura funciona como um mapa. Você primeiro acessa o arquivo, depois a aba, e
finalmente o intervalo de células.
💡 Exemplo prático:
function exemploHierarquia() {
const planilha = [Link](); //
Spreadsheet
const aba = [Link]("Controle"); // Sheet
const intervalo = [Link]("B2"); // Range
[Link]("Automação Iniciada");
}
Assim, você define o caminho exato até o local onde quer agir.
📘 Capítulo 3 — O Básico: Pegando a Planilha Ativa e uma Aba
Toda automação começa com identificar em qual planilha e aba o script está trabalhando.
📜 Estrutura base:
const planilha = [Link]();
const aba = [Link]("Dados");
Uma vez com a aba, você pode manipular qualquer parte dela:
function inserirTitulo() {
const aba =
[Link]().getSheetByName("Dados");
[Link]("A1").setValue("Relatório Financeiro 2025");
}
Esse comando escreve “Relatório Financeiro 2025” na célula A1 — simples e poderoso.
📘 Capítulo 4 — Lendo e Escrevendo em Células (Unitário)
Agora que já sabemos acessar uma aba, vamos interagir com as células.
🔍 Lendo um valor:
const valor = [Link]("A1").getValue();
[Link](valor);
✏️ Escrevendo um valor:
[Link]("B1").setValue("Novo dado");
💡 Exemplo prático:
Imagine que você quer copiar o valor de A1 para B1:
function copiarValor() {
const aba =
[Link]().getActiveSheet();
const valor = [Link]("A1").getValue();
[Link]("B1").setValue(valor);
}
Resultado: o conteúdo de A1 é replicado automaticamente em B1.
📘 Capítulo 5 — Intermediário 1: Manipulando Blocos de Dados
(Matrizes)
O poder real do Apps Script surge quando você trabalha com blocos de dados em vez de
célula por célula.
Isso é feito com getValues() e setValues(), que manipulam arrays bidimensionais
(matrizes).
📊 Exemplo:
function lerMatriz() {
const aba =
[Link]().getSheetByName("Vendas");
const dados = [Link]("A2:C10").getValues();
[Link](dados);
}
Isso retorna uma matriz com todas as linhas e colunas dentro do intervalo A2:C10.
✏️ Escrevendo várias linhas:
function escreverMatriz() {
const aba =
[Link]().getSheetByName("Resumo");
const novosDados = [
["Produto", "Quantidade", "Valor"],
["Camiseta", 10, 150],
["Tênis", 5, 400],
];
[Link](1, 1, [Link],
novosDados[0].length).setValues(novosDados);
}
Com uma única linha de código (setValues), você preenche toda uma tabela — rápido e
eficiente.
📘 Capítulo 6 — Código: Função limparFormulario()
Nem sempre queremos deixar dados antigos em uma planilha de formulário. Após um
envio, é útil limpar os campos automaticamente.
Isso evita erros de digitação e mantém o ambiente organizado.
💡 Exemplo prático:
function limparFormulario() {
const aba =
[Link]().getSheetByName("Formulário");
const intervalo = [Link]("B2:B10");
[Link](); // Limpa apenas o conteúdo, mantendo a
formatação
}
🔁 Dica: adicione essa função a um gatilho onFormSubmit() para limpar os
campos automaticamente após o envio de um formulário.
📘 Capítulo 7 — Formatação que Salva Vidas
A formatação é essencial para destacar informações importantes.
Com Apps Script, você pode automatizar a aparência da planilha, tornando-a legível e
visualmente inteligente.
✨ Exemplo:
function formatarCabecalho() {
const aba =
[Link]().getSheetByName("Relatório");
const cabecalho = [Link]("A1:D1");
[Link]("#1A73E8");
[Link]("white");
[Link]("bold");
[Link]("center");
}
Resultado: o cabeçalho ganha uma aparência profissional, com cores da identidade visual
da sua empresa.
📘 Capítulo 8 — Intermediário 2: Formatando a Tabela Inteira
Quando você não sabe quantas linhas existem, é possível detectar automaticamente o
tamanho da tabela e aplicar formatações dinâmicas.
💡 Exemplo prático:
function formatarTabela() {
const aba =
[Link]().getSheetByName("Vendas");
const ultimaLinha = [Link]();
const ultimaColuna = [Link]();
const intervalo = [Link](1, 1, ultimaLinha, ultimaColuna);
[Link](true, true, true, true, true, true);
[Link]("Arial");
[Link](10);
}
🧠 Dica: Combine com formatações condicionais (capítulo 20) para destacar
linhas automaticamente.
📘 Capítulo 9 — Disparadores (Triggers): O Piloto Automático
Os triggers (ou gatilhos) são eventos automáticos que executam scripts sem intervenção
humana.
Principais tipos:
● onOpen() → executa ao abrir a planilha
● onEdit() → executa ao editar uma célula
● onFormSubmit() → executa quando um formulário é enviado
Exemplo simples:
function onOpen() {
const ui = [Link]();
[Link]("Automação Sheets")
.addItem("Limpar Formulário", "limparFormulario")
.addToUi();
}
Toda vez que a planilha é aberta, um menu personalizado “Automação Sheets” aparece.
📘 Capítulo 10 — Código: onEdit para Validar Dados Simples
Você pode usar onEdit para validar automaticamente valores digitados.
Exemplo: se o valor da coluna A for “Pendente”, a célula da coluna B fica vermelha.
function onEdit(e) {
const linha = [Link]();
const aba = [Link]();
if ([Link]() === "Tarefas" && [Link]() === 1) {
const valor = [Link];
const celulaB = [Link](linha, 2);
if (valor === "Pendente") {
[Link]("#EA4335");
} else {
[Link]("white");
}
}
}
📘 Capítulo 11 — Fluxo Sheets + Email: Enviando Relatórios
Com o serviço MailApp, você pode enviar relatórios automáticos baseados em dados da
planilha.
💌 Exemplo:
function enviarRelatorio() {
const aba =
[Link]().getSheetByName("Resumo");
const total = [Link]("B10").getValue();
[Link]({
to: "equipe@[Link]",
subject: "Relatório Diário",
body: "O total de vendas do dia foi: R$ " + total
});
}
📬 Combine com um gatilho de tempo (Time-driven trigger) para enviar
e-mails automaticamente todo dia às 18h.
📘 Capítulo 12 — Intermediário 3: Enviando Email com Dados Filtrados
Vamos enviar apenas dados críticos por e-mail.
function enviarDadosCriticos() {
const aba =
[Link]().getSheetByName("Monitoramento"
);
const dados = [Link]("A2:C50").getValues();
const criticos = [Link](linha => linha[2] === "Crítico");
if ([Link] > 0) {
let corpo = " ⚠️ Itens Críticos:\n\n";
[Link](l => corpo += `${l[0]} - ${l[1]} - ${l[2]}\n`);
[Link]({
to: "gestor@[Link]",
subject: "Relatório de Itens Críticos",
body: corpo
});
}
}
📘 Capítulo 13 — Criação e Duplicação de Abas
Você pode duplicar uma aba ou criar uma nova automaticamente.
function gerarRelatorioMensal() {
const planilha = [Link]();
const atual = [Link]();
const nova = [Link](planilha);
[Link]("Relatório_" + new Date().getMonth());
}
🧾 Ideal para criar logs mensais ou backups automáticos das suas abas.
📘 Capítulo 14 — Gráfico: O Fluxo de Dados no Sheets/GAS
📈 (representado no PDF com diagrama visual)
1️⃣ getValues() → lê os dados da planilha
2️⃣ Processamento no GAS → aplica lógica, cálculos e regras
3️⃣ setValues() → escreve o resultado de volta
Esse fluxo forma a base de qualquer automação: entrada → processamento → saída.
📘 Capítulo 15 — Intermediário 4: Criação de Funções Personalizadas
Você pode criar fórmulas novas, como se fossem nativas do Sheets.
💡 Exemplo:
function DOBRAR(valor) {
return valor * 2;
}
Agora, na sua planilha:
=DOBRAR(A1)
📘 Capítulo 16 — Código: function TRADUZIR(texto)
Exemplo de integração com serviços externos:
function TRADUZIR(texto) {
return [Link](texto, "pt", "en");
}
Na planilha:
=TRADUZIR("Olá, mundo")
→ Retorna “Hello, world”.
📘 Capítulo 17 — Aumentando a Performance: Otimização de Código
Evite usar getValue() ou setValue() dentro de loops.
Use leitura e escrita em bloco:
❌ Lento:
for (let i = 0; i < 100; i++) [Link](i+1, 1).setValue(i);
✅ Rápido:
const valores = [Link]({length: 100}, (_, i) => [i]);
[Link](1, 1, [Link], 1).setValues(valores);
⚡ Isso pode reduzir o tempo de execução em até 100x!
📘 Capítulo 18 — Alertas e Prompts: Conversando com o Usuário
Você pode exibir mensagens diretamente na interface.
function solicitarNome() {
const ui = [Link]();
const resposta = [Link]("Digite seu nome:");
[Link]("Bem-vindo, " + [Link]() + "!");
}
📘 Capítulo 19 — Interação Sheets + Drive: Backup Automático
Automatize backups com poucos comandos:
function backupPlanilha() {
const arquivo =
[Link]([Link]().getId());
const copia = [Link]("Backup_" + new
Date().toISOString());
[Link]("Backup criado: " + [Link]());
}
Combine com um gatilho de tempo semanal para ter backups automáticos.
📘 Capítulo 20 — Desafios Finais: O Próximo Nível no Sheets
Você já domina o essencial. Agora, explore:
● Class RangeList → aplique formatação a múltiplos intervalos simultaneamente.
● Métodos de array (map, filter, reduce) para manipular dados rapidamente.
● Serviços avançados como CalendarApp, DriveApp e GmailApp.
● HTML Service para criar interfaces personalizadas dentro do Sheets.
🚀 Seu próximo passo: transformar planilhas em aplicativos empresariais
completos, com menus, dashboards e automação integrada.