Să spunem că vreau Foi de calcul Google să sorteze automat unele date, de exemplu coloana C
.
Cum fac asta?
Știu că pot sorta manual datele făcând clic dreapta și selectând Sortare date , dar nu asta sunt căutând.
Răspuns
Puteți utiliza pentru aceasta, dar trebuie să aveți datele într-un singur loc și o copie sortată automat a acestor date într-un alt loc.
De exemplu, spuneți Am Sheet1 cu datele mele:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Apoi în Sheet2, celula A1, aș pune această funcție:
= sort (Sheet1! A: C, 3, TRUE)
Aceasta ar afișa datele mele, dar sortate după coloană C (a treia coloană), crescător.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Comentarii
Răspuns
De asemenea, este posibil să utilizați Scripturi Google Apps pentru a realiza o sortare automată a datelor.
Acest lucru poate fi mai dificil de realizat și mai predispus la erori (aș continua să aleg soluția lui William Jackson, +1 BTW), dar am considerat că este suficient de interesant să arăt.
Am o foaie care arată astfel:
Am adăugat un nou script, urmând acești pași:
- în meniu, accesați Instrumente -> Editor de script …
- selectați Creați un nou proiect
-
în fereastra de cod goală care apare, lipiți următorul cod, care va fi rulat automat ori de câte ori celula este editată:
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 } ); } }
-
reveniți la foaie și începeți să jucați cu valorile pentru a vedea sortarea tabelului automat de fiecare dată
Notă:
În scriptul de mai sus,
- valoarea
4
reprezintă indicele coloanei D (coloanaValue
– pe care urmează să fie sortate) - valoarea
"B3:E9"
reprezintă intervalul tabelului (cu excepția rândului de antet)
Tabelul dvs. va fi foarte probabil diferit de al meu, deci aceste valori ar trebui ajustate în consecință.
Comentarii
- Am încercat funcția dvs. [editată] peEdit ( eveniment) {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}); }} dar continuați să primiți o eroare: TypeError: Nu se poate citi proprietatea ” sursă ” din nedefinit. (linia 2) care este următorul cod: var sheet = event.source.getActiveSheet (); vreo idee? NM, primiți eroarea numai când rulați de pe pagina de script, dar funcționează corect pe calculul real
- dar continuați să primiți o eroare: TypeError: Nu se poate citi proprietatea ” sursă ” din nedefinit. (linia 2) care este următorul cod: var sheet = event.source.getActiveSheet (); vreo idee? NM, primiți eroarea numai atunci când rulați de pe pagina de script, dar funcționează corect pe foaia de calcul reală. Acum întrebare … sortarea sa A-Z, cum o schimb în sortarea automată Z-A? mulțumesc
- @ drizzt09 Când apelați metoda, specificați probabil
null
pentru parametrulevent
, care altfel este corect populat de infrastructura de calcul Google când se declanșează un eveniment real. - @ drizzt09 pentru a modifica ordinea de sortare, schimbați linia
range.sort
astfel:range.sort( { column : columnToSortBy, ascending: false } );
. Pentru mai multe opțiuni de sortare, consultați developer.google.com/apps-script/class_range#sort - @ w0lf Vă mulțumim că a funcționat perfect. acum aș dori să adaug la el sau să am o funcție separată care îndeplinește exact aceeași funcție, dar deschisă sau reîmprospătată. Deci, atunci când deschid / reîmprospătez foaia Excel, va sorta automat a 4-a coloană descendentă la fel ca atunci când modific codul din coloana 4 cu codul dvs. curent. Mulțumim
Răspuns
O altă opțiune fără script este:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Intervalul este restricționat (A1: C3), deoarece în cazul în care ordinea este ascendentă vor apărea mai întâi intrări goale.
Comentarii
- Puteți să-mi spuneți unde ar trebui să pun acest lucru?
- Puteți utiliza
SELECT * WHERE C <> '' ORDER BY C
pentru a ignora intrările necompletate, atunci puteți utiliza un interval suficient de mare pentru a include toate rândurile curente și viitoare.
Răspuns
Aici „un script generic care se va autosorta pe baza primei coloane și presupune un rând antet.
Pentru a crea un script:
- În meniu, accesați Instrumente -> Editor de scripturi …
În fereastra de cod goală, lipiți următorul cod, care va rula automat ori de câte ori este editată o celulă:
// 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 } ); } }
Comentarii
- Am constatat că trebuie să
var sheet = SpreadsheetApp.getActiveSpreadsheet();
în loc de ceea ce ‘ are aici. - Acest lucru funcționează excelent, dar cum pot edita acest lucru, astfel încât să se sorteze doar pe o singură foaie în doc?
- ‘ nu pare să funcționeze
Răspunde
Usi ng soluția de script, dar sortează pe mai multe coloane
Am vrut să sortez după o coloană din meniul drop-down și apoi după dată.
Pentru a face acest lucru, modificați linia „range.sort” a oricăruia dintre fragmentele de cod ale lui Cristian sau geekspotz astfel:
// 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}]);
Diferența constă în adăugarea parantezelor drepte în jurul întregii instrucțiuni (matrice) și separarea sortărilor prin virgule.
Modificarea codului de sortare extrasă din răspunsul lui Serge „Stack Overflow” aici : Sortare automată pe foi
Răspuns
Aici am creat un script de sortare automată și foaie de calcul (necesită un pic de lucru pe foaie, o copiere a codului și setarea intervalelor dvs. Se bazează pe mai multe răspunsuri stackexchange
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Înregistrarea sa și obține valoarea intervalului pe care vă concentrați la ultima editare comparați-o cu valoarea acum după editarea efectivă și dacă diferit, sortează tabelul.
Răspuns
Foi de calcul Google are Filtre tocmai din acest motiv și face n „nu este necesar să creați o foaie nouă în documentul dvs.
Documentare: https://support.google.com/docs/answer/3540681
Răspuns
Se poate face folosind Google App Script. Scriptul se va sorta automat ori de câte ori există o modificare a datelor din foaie.
În foaia dvs. Google:
Alegeți Instrumente -> Editor de scripturi și lipiți scriptul de mai jos și salvați.
Înlocuiți variabilele SHEET_NAME, SORT_DATA_RANGE și SORT_ORDER cu valorile corespunzătoare.
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."); }
Sursă: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
de ex.
= sort(Sheet1!A:C; 3; TRUE)