Como posso fazer alguns dados em uma classificação automática do Planilhas Google?

57

Digamos que eu queira que o Planilhas Google classifique automaticamente alguns dados, por exemplo, coluna C.

Como faço isso?

Eu sei que posso classificar dados manualmente clicando com o botão direito do mouse e selecionando Classificar dados , mas não é isso que estou procurando.

nozes
fonte

Respostas:

51

Você pode usar a sort()função para isso, mas é necessário ter seus dados em um local e uma cópia ordenada automaticamente desses dados em outro local.

Por exemplo, digamos que eu tenha a Plan1 com meus dados:

   | A    | B    | C
=====================
 1 | This | this | 2
 2 | Is   | is   | 1
 3 | Test | test | 3

Então, na Sheet2, célula A1, eu colocaria esta função:

= classificar (Folha1! A: C, 3, VERDADEIRO)

Isso mostraria meus dados, mas classificados pela coluna C (a terceira coluna), crescente.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
William Jackson
fonte
Os parâmetros devem ser separados por ponto-e-vírgula, por ;exemplo= sort(Sheet1!A:C; 3; TRUE)
2
@ Pet Ele funciona muito bem para mim com as vírgulas.
William Jackson
6
@ user17634: Isso depende das suas configurações de localidade.
Vidar S. Ramdal
42

Também é possível usar os scripts do Google Apps para obter a classificação automática no local dos dados.

Isso pode ser mais difícil de alcançar e mais suscetível a erros (eu continuaria com a solução de William Jackson, +1 BTW), mas achei interessante o suficiente para mostrar.

Eu tenho uma planilha que se parece com isso:

folha de classificação automática

Eu adicionei um novo script, usando estas etapas:

  • no menu, vá em Ferramentas -> Editor de scripts ...
  • selecione Criar um novo projeto
  • na janela de código vazia exibida, cole o código a seguir, que será executado automaticamente sempre que uma célula for editada:

    function onEdit(event){
      var sheet = event.source.getActiveSheet();
      var editedCell = sheet.getActiveCell();
    
      var columnToSortBy = 4;
      var tableRange = "B3:E9";
    
      if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy } );
      }
    }
    
  • volte para a planilha e comece a brincar com os valores para ver a tabela ser classificada automaticamente cada vez

Nota:

No script acima,

  • o valor 4representa o índice da coluna D (a Valuecoluna - a que será classificada)
  • o valor "B3:E9"representa o intervalo da tabela (excluindo a linha do cabeçalho)

Sua tabela provavelmente será diferente da minha, portanto, esses valores devem ser ajustados de acordo.

Cristian Lupascu
fonte
Eu tentei a sua função [editada] onEdit (evento) {var sheet = event.source.getActiveSheet (); var editCell = planilha.getActiveCell (); var columnToSortBy = 4; var tableRange = "A2: F99"; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} mas continue recebendo um erro: TypeError: Não é possível ler a propriedade "source" de indefinida. (linha 2), que é o seguinte código: var sheet = event.source.getActiveSheet (); alguma ideia? NM, só obtém o erro ao executar a partir da página de script, mas funciona corretamente no spreadshee real
drizzt09
mas continue recebendo um erro: TypeError: Não é possível ler a propriedade "source" de indefinida. (linha 2), que é o seguinte código: var sheet = event.source.getActiveSheet (); alguma ideia? NM, só obtém o erro ao executar a partir da página de script, mas funciona corretamente na planilha. Agora pergunta ... sua classificação AZ, como faço para alterá-lo para classificar automaticamente o ZA? obrigado
drizzt09
@ drizzt09 Ao chamar o método, você provavelmente especifica nullo eventparâmetro, que de outra forma é preenchido corretamente pela infraestrutura da Planilha do Google quando um evento real é acionado.
Cristian Lupascu
3
@ drizzt09 para mudar a ordem de classificação, altere a range.sortlinha como esta: range.sort( { column : columnToSortBy, ascending: false } ); . Para obter mais opções de classificação, consulte developers.google.com/apps-script/class_range#sort
Cristian Lupascu
@ w0lf Obrigado por ter funcionado perfeitamente. agora eu gostaria de adicionar ou ter uma função separada que execute exatamente a mesma função, mas ao abrir ou atualizar. Portanto, quando eu abrir / atualizar a planilha do Excel, ela classificará automaticamente a quarta coluna, descendente da mesma forma que quando edito o código na coluna 4 com o código atual. Graças
10

Aqui está um script genérico que se classifica automaticamente com base na 1ª coluna e assume uma linha de cabeçalho.

Para criar um script:

  • No menu, vá para Ferramentas -> Editor de scripts ...

Na janela de código vazia, cole o seguinte código, que será executado automaticamente sempre que uma célula for editada:

 // LinkBack to this script:
 // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036

 /**
 * Automatically sorts the 1st column (not the header row) Ascending.
 */
function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:T99"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}
geekzspot
fonte
3
Eu descobri que precisava, em var sheet = SpreadsheetApp.getActiveSpreadsheet();vez do que está aqui.
dldnh
Isso funciona muito bem, mas como posso editar isso para classificar apenas em uma única planilha no documento?
moobot
parece não funcionar
shadowz1337 19/02
6

Outra opção sem um script é:

=QUERY(A1:C3,"SELECT * ORDER BY C")  

O intervalo é restrito (A1: C3) porque, onde a ordem está subindo, as entradas em branco aparecerão primeiro.

nozes
fonte
4
Você poderia me informar onde devo colocar isso?
Louis Tran
11
Você pode usar SELECT * WHERE C <> '' ORDER BY Cpara ignorar entradas em branco e, em seguida, usar um intervalo grande o suficiente para incluir todas as linhas atuais e futuras.
Guss
0

Usando a solução de script, mas classifique em mais de uma coluna

Eu queria classificar por uma coluna do menu suspenso e depois por data.

Para fazer isso, modifique a linha "range.sort" dos trechos de código de Cristian ou geekspotz da seguinte maneira:

// Sorts descending by edited column, then ascending by column 1 
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);

A diferença é adicionar colchetes ao redor de toda a instrução (matriz) e separar as classificações por vírgulas.

A modificação do código de classificação obtida da resposta do Stack Overflow de Serge aqui : Classificação automática em folhas

estrutura profunda
fonte