Come posso fare alcuni dati su un ordinamento automatico di Fogli Google?


58

Supponiamo che io voglia che Google Sheets ordini automaticamente alcuni dati, ad esempio la colonna C.

Come lo faccio?

So che posso ordinare manualmente i dati facendo clic con il tasto destro e selezionando Ordina dati , ma questo non è quello che sto cercando.

Risposte:


52

Puoi usare la sort()funzione per quello, ma devi avere i tuoi dati in un posto e una copia ordinata automaticamente di quei dati in un altro posto.

Ad esempio, supponiamo di avere Sheet1 con i miei dati:

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

Quindi in Sheet2, cella A1, vorrei inserire questa funzione:

= ordina (Foglio1! A: C, 3, VERO)

Ciò mostrerebbe i miei dati, ma ordinati per colonna C (la terza colonna), in ordine crescente.

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

I parametri devono essere separati da punto e virgola, ;ad es.= sort(Sheet1!A:C; 3; TRUE)

2
@Petr Funziona bene per me con le virgole.
William Jackson,

6
@ user17634: dipende dalle impostazioni locali.
Vidar S. Ramdal,

43

È anche possibile utilizzare gli script di Google Apps per ottenere l'ordinamento automatico sul posto dei dati.

Questo potrebbe essere più difficile da ottenere e più soggetto a errori (continuerei a cercare la soluzione di William Jackson, +1 BTW), ma ho pensato che fosse abbastanza interessante da mostrare.

Ho un foglio che assomiglia a questo:

foglio di ordinamento automatico

Ho aggiunto un nuovo script, usando questi passaggi:

  • nel menu, vai su Strumenti -> Script Editor ...
  • seleziona Crea un nuovo progetto
  • nella finestra del codice vuoto che appare, incolla il seguente codice, che verrà eseguito automaticamente ogni volta che una cella viene modificata:

    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 } );
      }
    }
    
  • tornare al foglio e iniziare a giocare con i valori per vedere l'ordinamento del tavolo automaticamente ogni volta

Nota:

Nello script sopra,

  • il valore 4rappresenta l'indice della colonna D (la Valuecolonna - l'on che verrà ordinato)
  • il valore "B3:E9"rappresenta l'intervallo della tabella (esclusa la riga di intestazione)

Molto probabilmente la tua tabella differirà dalla mia, quindi questi valori dovrebbero essere adeguati di conseguenza.


Ho provato la tua funzione [modificata] onEdit (evento) {var sheet = event.source.getActiveSheet (); var editingCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = "A2: F99"; if (editingCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} ma continua a ricevere un errore: TypeError: impossibile leggere la proprietà "source" da non definito. (riga 2) che è il seguente codice: var sheet = event.source.getActiveSheet (); qualche idea? NM, ottieni l'errore solo quando
sei in

ma continua a ricevere un errore: TypeError: impossibile leggere la proprietà "source" da non definito. (riga 2) che è il seguente codice: var sheet = event.source.getActiveSheet (); qualche idea? NM, ottiene l'errore solo quando viene eseguito dalla pagina dello script, ma funziona correttamente sul foglio di calcolo effettivo. Ora domanda ... il suo ordinamento AZ, come posso cambiarlo in auto-ordinamento ZA? grazie
drizzt09,

@ drizzt09 Quando chiami il metodo che probabilmente specifichi nullper il eventparametro, che altrimenti viene popolato correttamente dall'infrastruttura di Google Spreadsheet quando viene attivato un evento reale.
Cristian Lupascu,

3
@ drizzt09 per cambiare l'ordinamento, modificare la range.sortriga come questa: range.sort( { column : columnToSortBy, ascending: false } ); . Per ulteriori opzioni di ordinamento, consultare developers.google.com/apps-script/class_range#sort
Cristian Lupascu,

@ w0lf Grazie che ha funzionato perfettamente. ora vorrei aggiungere ad esso o avere una funzione separata che svolge esattamente la stessa funzione ma su open o refresh. Quindi, quando apro / aggiorno il foglio Excel, ordinerà automaticamente la quarta colonna decrescente come quando modifico il codice nella colonna 4 con il tuo codice corrente. Grazie

10

Ecco uno script generico che si ordinerà automaticamente in base alla prima colonna e presuppone una riga di intestazione.

Per creare uno script:

  • Nel menu, vai su Strumenti -> Editor di script ...

Nella finestra del codice vuota, incolla il seguente codice, che verrà eseguito automaticamente ogni volta che una cella viene modificata:

 // 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 } );
  }
}

3
Ho scoperto che dovevo var sheet = SpreadsheetApp.getActiveSpreadsheet();invece di quello che è qui.
dldnh,

Funziona benissimo, ma come posso modificarlo in modo da ordinarlo solo su un singolo foglio in doc?
moobot,

non sembra funzionare
shadowz1337,

7

Un'altra opzione senza uno script è:

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

L'intervallo è limitato (A1: C3) perché nel punto in cui l'ordine è crescente verranno visualizzate per prime le voci vuote.


4
La prego di farmi sapere dove devo inserirlo?
Louis Tran,

1
È possibile utilizzare SELECT * WHERE C <> '' ORDER BY Cper ignorare le voci vuote, quindi è possibile utilizzare un intervallo sufficientemente ampio da includere tutte le righe correnti e future.
Guss,

0

Utilizzando la soluzione di script, ma ordinare su più di una colonna

Volevo ordinare per colonna di menu a discesa e poi per data.

Per fare ciò, modifica la riga "range.sort" di uno dei frammenti di codice di Cristian o geekspotz in questo modo:

// 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}]);

La differenza sta nell'aggiungere le parentesi dritte attorno all'intera istruzione (array) e separare gli ordinamenti tramite virgole.

Modifica del codice di ordinamento estratta dalla risposta di Stack Overflow di Serge qui : Ordinamento automatico su fogli


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.