
👌 Seleção múltipla no Google Sheets: script para células com validação de dados
Uma lista suspensa no Google Sheets é uma funcionalidade prática. Configure a validação de dados e a célula só aceita valores de um intervalo. Mas há um senão: só pode selecionar um item. E se a sua tarefa precisar de uma etiqueta «urgent, budget, design», três valores numa só célula? Com as ferramentas padrão, não há forma de o fazer.
Na prática, esta necessidade surge constantemente: categorizar despesas, etiquetar tarefas, listar participantes. Abrir o editor de cada vez e adicionar valores separados por vírgulas é uma perda de tempo. A solução é um pequeno script do Google Apps Script que adiciona uma barra lateral com caixas de seleção para qualquer intervalo de validação de dados.
Abaixo encontra uma configuração passo a passo: desde a criação do ficheiro de script até um menu «Scripts» pronto a usar na sua folha de cálculo. O código foi testado em folhas de cálculo reais, funciona sem permissões adicionais e não requer conhecimentos de programação.
💡 Visão geral rápida:
- Configure a validação de dados para uma célula por intervalo e opte por mostrar um aviso em vez de rejeitar a entrada
- Crie dois ficheiros no editor de scripts:
multi-select.gscom a lógica edialog.htmlcom a interface da barra lateral - Guarde o projeto, atualize a folha de cálculo e o item de menu Scripts aparecerá
- Selecione uma célula com validação de dados, execute o script e marque os valores pretendidos com as caixas de seleção
- Clique em Selecionar e a célula será preenchida com os itens selecionados separados por vírgulas
Passo 1: Preparar a folha de cálculo e a validação de dados
Abra a Folha de Cálculo do Google com a qual está a trabalhar. Selecione a célula de destino (ou intervalo) e configure a validação de dados: Dados → Validação de dados. No campo «Critérios», selecione «Lista de um intervalo» e especifique a lista da qual as opções serão extraídas.
Ponto importante: não ative «Rejeitar entrada», porque se o fizer, o script não conseguirá escrever vários valores separados por vírgulas na célula. Mostrar um aviso é suficiente.
Se não tiver um intervalo pronto, crie uma folha separada «Referência» e liste todos os valores permitidos numa coluna. Faça referência a este intervalo na validação de dados.
Passo 2: Criar o Apps Script
No menu da Folha de cálculo: Extensões → Apps Script. O editor abrirá com um separador limpo e um ficheiro vazio. Primeiro, vamos criar a parte do lado do servidor.
Clique em Ficheiro → Novo → Ficheiro de script. Dê-lhe o nome multi-select.gs e cole o código:
1 function onOpen(e) { 2 SpreadsheetApp.getUi() 3 .createMenu('Scripts') 4 .addItem('Multi-select for this cell...', 'showDialog') 5 .addToUi(); 6 } 7 8 function showDialog() { 9 var html = HtmlService.createTemplateFromFile('dialog').evaluate(); 10 SpreadsheetApp.getUi() 11 .showSidebar(html); 12 } 13 14 var valid = function() { 15 try { 16 return SpreadsheetApp.getActiveRange() 17 .getDataValidation() 18 .getCriteriaValues()[0] 19 .getValues(); 20 } catch(e) { 21 return null; 22 } 23 }; 24 25 function fillCell(e) { 26 var s = []; 27 for (var i in e) { 28 if (i.substr(0, 2) == 'ch') s.push(e[i]); 29 } 30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', ')); 31 }
O que está a acontecer aqui: onOpen adiciona o item «Multi-seleção para esta célula…» ao menu personalizado da folha de cálculo. showDialog abre a barra lateral com a interface HTML. A função valid extrai a lista de valores permitidos da validação de dados da célula ativa. E fillCell recolhe as caixas de seleção marcadas e escreve-as na célula separadas por vírgulas.
Nota: i.substr(0, 2) filtra apenas os parâmetros cujos nomes começam por ch, estes são identificadores de caixas de seleção do formulário HTML. Outros parâmetros são ignorados.
Clique em Ficheiro → Guardar (ou Ctrl+S). Na primeira gravação, o script solicitará permissões, isto é normal, sem elas não conseguirá ler os dados das células e mostrar a barra lateral.
Passo 3: Adicionar a interface HTML
Agora vamos criar a própria barra lateral. No mesmo editor: Ficheiro → Novo → Ficheiro HTML. Dê-lhe o nome dialog.html e cole:
1 <div style="font-family: sans-serif;"> 2 <? var data = valid(); ?> 3 <form id="form" name="form"> 4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?> 5 <? for (var i = 0; i < data.length; i++) { ?> 6 <? for (var j = 0; j < data[i].length; j++) { ?> 7 <input type="checkbox" 8 id="ch<?= '' + i + j ?>" 9 name="ch<?= '' + i + j ?>" 10 value="<?= data[i][j] ?>"> 11 <?= data[i][j] ?><br> 12 <? } ?> 13 <? } ?> 14 <? } else { ?> 15 <p>This cell has no 16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>. 17 </p> 18 <? } ?> 19 <input type="button" value="Select" 20 onclick="google.script.run.fillCell(this.parentNode)" /> 21 <input type="button" value="Refresh validation" 22 onclick="google.script.run.showDialog()" /> 23 </form> 24 </div>
A lógica é simples: a tag do lado do servidor <? var data = valid(); ?> chama a função valid() do ficheiro GS e obtém um array de valores permitidos. Se um intervalo for especificado, as caixas de seleção são renderizadas, uma para cada valor. O botão Selecionar envia o formulário para fillCell, o botão Atualizar validação relê a validação de dados (conveniente ao alternar entre células).
Se a célula selecionada não tiver validação de dados, o painel mostrará uma mensagem com um link para a ajuda do Google.
Guarde o ficheiro: Ficheiro → Guardar. Ambos os ficheiros (multi-select.gs e dialog.html) devem estar no mesmo projeto.
Passo 4: Executar e usar
Volte à folha de cálculo e atualize a página. Após alguns segundos, um novo item Scripts aparecerá na barra de menu, este é o resultado de onOpen.
Agora o fluxo de trabalho:
- Selecione qualquer célula que tenha validação de dados por intervalo configurada.
- Vá a Scripts → Multi-seleção para esta célula….
- Uma barra lateral abrirá à direita com uma lista de caixas de seleção, todos os valores do seu intervalo de validação.
- Marque os itens pretendidos e clique em Selecionar.
- A célula será preenchida com os valores selecionados separados por vírgulas:
urgent, budget, design.
Não precisa de fechar a barra lateral. Basta clicar noutra célula (também com validação de dados) e clicar em Atualizar validação, a lista de caixas de seleção será atualizada para a nova célula.

Na captura de ecrã, o resultado: uma célula com validação de dados, uma barra lateral com caixas de seleção ativas e o menu Scripts na barra de menu. É exatamente assim que a solução se apresenta em ação.
Passo 5: O que pode ser melhorado
O script básico resolve a tarefa «selecionar vários valores de uma lista suspensa» e, para a maioria dos cenários, isto é suficiente. Mas se trabalhar intensivamente com a folha de cálculo, há algumas melhorias:
- Adicionar «Selecionar Tudo» / «Desmarcar Tudo». Dois botões no formulário HTML que marcam ou desmarcam programaticamente todas as caixas de seleção. Algumas linhas em JavaScript e poupa uma dúzia de cliques num intervalo grande.
- Substituir a vírgula por outro delimitador. Na função
fillCell, a linhas.join(', ')une os valores com uma vírgula. Se os seus dados contiverem vírgulas como parte do valor, substitua por;ou|. - Atualização automática ao mudar de célula. Em vez de clicar manualmente em «Atualizar validação», pode anexar um gatilho ao evento de seleção de célula (
onSelectionChange), mas isto requer código ligeiramente mais complexo e instalação manual do gatilho.
O código fonte do script é uma adaptação da solução de Alexander Ivanov, publicada por Arthur Attwell no GitHub Gist. Também pode encontrar discussão da comunidade e melhorias lá.
Abaixo está um tutorial em vídeo em inglês, se preferir ver em vez de ler:
⁉️🤔 Perguntas frequentes
O script não aparece no menu depois de guardar. O que devo fazer?
Atualize a página da folha de cálculo (F5 ou Ctrl+R). Se não resultar, verifique se a função se chama exatamente
onOpen(maiúsculas/minúsculas são importantes) e se não há erros no editor de scripts: Ver → Registos mostrará o rastreamento da pilha. Por vezes, ajuda fechar o editor de scripts e reabri-lo.
A barra lateral abre, mas não há caixas de seleção, apenas uma mensagem sobre Validação de Dados.
Isto significa que a célula selecionada não tem validação de dados por intervalo. Selecione a célula para a qual configurou a validação no Passo 1. Se a validação estiver configurada para um intervalo de células em vez de uma, certifique-se de que a célula ativa é exatamente aquela que está no intervalo.
O script pode ser usado em várias folhas numa só folha de cálculo?
Sim. O script está anexado ao contentor (folha de cálculo), não a uma folha específica. A validação de dados funciona ao nível da folha, configure-a nas folhas necessárias e a barra lateral irá obter os valores da célula ativa, independentemente da folha.
Depois de selecionar os valores, a célula mostra um erro «Valor inválido».
Ativou «Rejeitar entrada» nas definições de validação de dados. Volte a Dados → Validação de dados, selecione «Mostrar aviso» em vez de «Rejeitar entrada». Se os dados forem críticos, deixe o aviso, ele não bloqueia a escrita pelo script.
O script solicita acesso à conta Google, isto é seguro?
Sim. As permissões são necessárias para
SpreadsheetApp.getActiveRange()(ler dados da célula) eSpreadsheetApp.getUi()(mostrar menu e barra lateral). O script só funciona dentro da sua folha de cálculo e não tem acesso a outros ficheiros no Drive. A lista completa de permissões é visível na janela de autorização.
Qual o script de multi-seleção a instalar na sua folha de cálculo
A solução descrita é uma estrutura de trabalho mínima. Dois ficheiros, nenhuma biblioteca externa, lógica clara. Para controlo de despesas, etiquetagem de tarefas e quaisquer cenários onde precise de escrever vários valores de uma lista de referência numa célula, é mais do que suficiente.
Se trabalha intensamente com o Google Sheets, consulte a documentação do Apps Script. As capacidades vão muito além das caixas de seleção: envio automático de emails quando uma célula muda, geração de documentos a partir de modelos, integração com o Google Calendar. Comece com este script e, quem sabe, poderá escrever as suas próprias automações.



