Skip to content

Tudo para WordPress, desenvolvimento web — e não só

👌 Seleção múltipla no Google Sheets: script para células com validação de dados

👌 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.gs com a lógica e dialog.html com 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:

1function onOpen(e) {
2 SpreadsheetApp.getUi()
3 .createMenu('Scripts')
4 .addItem('Multi-select for this cell...', 'showDialog')
5 .addToUi();
6}
7
8function showDialog() {
9 var html = HtmlService.createTemplateFromFile('dialog').evaluate();
10 SpreadsheetApp.getUi()
11 .showSidebar(html);
12}
13
14var valid = function() {
15 try {
16 return SpreadsheetApp.getActiveRange()
17 .getDataValidation()
18 .getCriteriaValues()[0]
19 .getValues();
20 } catch(e) {
21 return null;
22 }
23};
24
25function 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.

Barra lateral de script com caixas de seleção para escolher valores

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 linha s.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) e SpreadsheetApp.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.