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
4reprezintă 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
nullpentru 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.sortastfel: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 Cpentru 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)