Supponiamo che io voglia che Fogli Google ordini automaticamente alcuni dati, ad esempio la colonna C
.
Come posso farlo?
So che posso ordinare manualmente i dati facendo clic con il pulsante destro del mouse e selezionando Ordina dati , ma non è questo che io “m cercando.
Risposta
Puoi utilizzare 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, ad esempio Ho 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, inserisco questa funzione:
= sort (Sheet1! A: C, 3, TRUE)
Questo mostrerebbe i miei dati, ma ordinati per colonna C (la terza colonna), crescente.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Commenti
Risposta
È anche possibile utilizzare Google Apps Scripts per ottenere lordinamento automatico sul posto dei dati.
Potrebbe essere più difficile da ottenere e più soggetto a errori (preferirei comunque la soluzione di William Jackson, +1 BTW), ma ho pensato che fosse abbastanza interessante da mostrare.
Ho un foglio simile a questo:
Ho aggiunto un nuovo script, utilizzando questi passaggi:
- nel menu, vai a Strumenti -> Editor di script …
- seleziona Crea un nuovo progetto
-
nella finestra del codice vuota che appare, incolla il seguente codice, che verrà eseguito automaticamente ogni volta che un la 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 } ); } }
-
torna al foglio e inizia a giocare con i valori per vedere lordinamento della tabella automaticamente ogni volta
Nota:
Nella sopra lo script,
- il valore
4
rappresenta lindice della colonna D (la colonnaValue
– la su quelle “verranno ordinate) - il valore
"B3:E9"
rappresenta lintervallo della tabella (esclusa la riga di intestazione)
La tua tabella molto probabilmente sarà diversa dalla mia, quindi questi valori dovrebbero essere regolati di conseguenza.
Commenti
- Ho provato la tua funzione [modificata] su Modifica ( evento) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = ” A2: F99 “; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} ma continua a ricevere un errore: TypeError: Impossibile leggere la proprietà ” source ” da undefined. (riga 2) che è il seguente codice: var sheet = event.source.getActiveSheet (); qualche idea? NM, ricevi lerrore solo durante lesecuzione dalla pagina dello script, ma funziona correttamente sul foglio di calcolo effettivo
- ma continua a ricevere un errore: TypeError: Impossibile leggere la proprietà ” sorgente ” da undefined. (riga 2) che è il seguente codice: var sheet = event.source.getActiveSheet (); qualche idea? NM, viene visualizzato lerrore solo durante lesecuzione dalla pagina dello script, ma funziona correttamente sul foglio di calcolo effettivo. Ora domanda … è lordinamento A-Z, come posso cambiarlo per lordinamento automatico Z-A? grazie
- @ drizzt09 Quando chiami il metodo probabilmente specifichi
null
per il parametroevent
, che altrimenti è correttamente popolato dallinfrastruttura del foglio di lavoro di Google quando viene attivato un evento reale. - @ drizzt09 per modificare lordinamento, modifica la riga
range.sort
in questo modo:range.sort( { column : columnToSortBy, ascending: false } );
. Per ulteriori opzioni di ordinamento vedi developers.google.com/apps-script/class_range#sort - @ w0lf Grazie per aver funzionato perfettamente. ora vorrei aggiungerlo o avere una funzione separata che esegue la stessa identica funzione ma allapertura o allaggiornamento. Quindi, quando apro / aggiorno il foglio Excel, ordinerà automaticamente la quarta colonna discendendo come quando modifico il codice nella colonna 4 con il tuo codice corrente. Grazie
Risposta
Unaltra opzione senza script è:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Lintervallo è limitato (A1: C3) perché dove lordine è crescente appariranno per prime voci vuote.
Commenti
- Potresti farmi sapere dove devo metterlo?
- Puoi usare
SELECT * WHERE C <> '' ORDER BY C
per ignorare le voci vuote, quindi puoi utilizzare un intervallo sufficientemente ampio da includere tutte le righe attuali e future.
Risposta
Qui “uno script generico che verrà ordinato 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 } ); } }
Commenti
- Ho scoperto che dovevo
var sheet = SpreadsheetApp.getActiveSpreadsheet();
invece di quello che ‘ è qui. - Funziona benissimo, ma come posso modificarlo in modo che venga ordinato solo su un singolo foglio in doc?
- ‘ non sembra funzionare
Risposta
Usi ng la soluzione di script, ma ordinare su più di una colonna
Volevo ordinare in base a una colonna del menu a discesa e quindi per data.
Per farlo, modifica la riga “range.sort” degli snippet 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 consiste nellaggiungere le parentesi dritte attorno allintera istruzione (array) e separare gli ordinamenti con virgole.
Modifica del codice di ordinamento estratta dalla risposta di Stack Overflow di Serge qui : Ordinamento automatico sui fogli
Risposta
Qui ho creato un script di ordinamento automatico e foglio di lavoro (richiede un po di lavoro sul foglio, una copia incolla del codice e limpostazione degli intervalli. Si basa su più risposte stackexchange
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Il suo record e ottiene il valore dellintervallo su cui ti concentri allultima modifica confrontalo con il valore ora dopo la modifica effettiva e se diverso ordina la tabella.
Risposta
Fogli Google ha filtri proprio per questo motivo e lo fa Non è necessario creare un nuovo foglio nel documento.
Documentazione: https://support.google.com/docs/answer/3540681
Risposta
Può essere fatto utilizzando Google App Script. Lo script verrà automaticamente ordinato ogni volta che viene apportata una modifica ai dati del foglio.
Nel tuo foglio Google:
scegli Strumenti -> Script Editor e incolla lo script seguente e salva.
Sostituisci le variabili SHEET_NAME, SORT_DATA_RANGE e SORT_ORDER con i valori corrispondenti.
SHEET_NAME = "Sheet1"; SORT_DATA_RANGE = "A1:C999"; SORT_ORDER = [ {column: 3, ascending: false}, // 3 = column number, sorting by descending order {column: 1, ascending: true}, // 1 = column number, sort by ascending order {column: 2, ascending: true} ]; function onEdit(e){ multiSortColumns(); } function multiSortColumns(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(SHEET_NAME); var range = sheet.getRange(SORT_DATA_RANGE); range.sort(SORT_ORDER); ss.toast("Sort complete."); }
Fonte: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
ad es.
= sort(Sheet1!A:C; 3; TRUE)