Lad os sige, at jeg vil have Google Sheets til automatisk at sortere nogle data, for eksempel kolonne C
.
Hvordan gør jeg det?
Jeg ved, at jeg kan sortere data manuelt ved at højreklikke og vælge Sortér data , men det er ikke det, jeg leder efter.
Svar
Du kan bruge sort()
funktion til det, men du skal have dine data ét sted og en automatisk sorteret kopi af disse data et andet sted.
Sig f.eks. Jeg har Sheet1 med mine data:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Så i Sheet2, celle A1, vil jeg sætte denne funktion:
= sort (Sheet1! A: C, 3, TRUE)
Dette viser mine data, men sorteret efter kolonne C (tredje kolonne), stigende.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Kommentarer
Svar
Det er også muligt at bruge Google Apps Scripts for at opnå automatisk stedlig sortering af dataene.
Dette kan være sværere at opnå og mere udsat for fejl (jeg vil stadig gå efter William Jacksons løsning, +1 BTW), men jeg syntes, det var interessant nok at vise.
Jeg har et ark, der ser sådan ud:
Jeg tilføjede et nyt script ved hjælp af disse trin:
- i menuen, gå til Værktøjer -> Script Editor …
- vælg Opret et nyt projekt
-
i det tomme kodevindue, der vises, indsæt følgende kode, som køres automatisk, når en cellen redigeres:
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 } ); } }
-
gå tilbage til arket og begynd at lege med værdierne for at se tabellen sortere automatisk hver gang
Bemærk:
I over scriptet
- værdien
4
repræsenterer indekset for kolonne D (Value
kolonnen – kolonnen D på at “sorteres) - værdien
"B3:E9"
repræsenterer tabelområdet (eksklusive headerrækken)
Din tabel vil højst sandsynligt afvige fra min, så disse værdier bør justeres i overensstemmelse hermed.
Kommentarer
- Jeg prøvede din [redigerede] funktion onEdit ( begivenhed) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = ” A2: F99 “; hvis (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({kolonne: columnToSortBy}); }} men fortsæt med at få en fejl: TypeError: Kan ikke læse ejendom ” kilde ” fra udefineret. (linje 2), som er den følgende kode: var sheet = event.source.getActiveSheet (); nogle ideer? NM, få kun fejlen, når den kører fra script-siden, men den fungerer korrekt på det aktuelle spreadshee
- men fortsæt med at få en fejl: TypeError: Kan ikke læse egenskaben ” kilde ” fra udefineret. (linje 2), som er den følgende kode: var sheet = event.source.getActiveSheet (); nogle ideer? NM, får kun fejlen, når den kører fra script-siden, men den fungerer korrekt på det faktiske regneark. Spørg nu … dens sortering AZ, hvordan ændrer jeg den til automatisk sortering Z-A? tak
- @ drizzt09 Når du kalder metoden, skal du sandsynligvis angive
null
tilevent
-parameteren, som ellers er korrekt befolket af Googles regnearkinfrastruktur, når en reel begivenhed udløses. - @ drizzt09 for at ændre sorteringsrækkefølgen skal du ændre linjen
range.sort
:range.sort( { column : columnToSortBy, ascending: false } );
. For flere sorteringsindstillinger se developers.google.com/apps-script/class_range#sort - @ w0lf Tak, det fungerede perfekt. nu vil jeg tilføje det eller have en separat funktion, der udfører nøjagtig den samme funktion, men åben eller opdater. Så når jeg åbner / opdaterer excel-arket, sorterer det automatisk 4. kolonne faldende det samme som når jeg redigerer koden i kolonne 4 med din nuværende kode. Tak
Svar
En anden mulighed uden et script er:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Området er begrænset (A1: C3), fordi hvor ordren stiger, vises tomme poster først.
Kommentarer
- Kan du venligst fortælle mig, hvor skal jeg placere dette i?
- Du kan bruge
SELECT * WHERE C <> '' ORDER BY C
for at ignorere blanke poster, så kan du bruge et stort stort interval til at inkludere alle nuværende og fremtidige rækker.
Svar
Her “er et generisk script, der automatisk sorteres på baggrund af 1. kolonne og antager en headerrække.
Sådan oprettes et script:
- Gå til Værktøjer -> Script Editor i menuen …
I det tomme kodevindue skal du indsætte følgende kode, som kører automatisk, når en celle redigeres:
// 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 } ); } }
Kommentarer
- Jeg fandt ud af, at jeg måtte
var sheet = SpreadsheetApp.getActiveSpreadsheet();
i stedet for hvad ‘ er her. - Dette fungerer godt, men hvordan kan jeg redigere dette, så det kun sorteres på et enkelt ark i dok?
- virker ikke ‘ virker ikke
Svar
Usi ng scriptløsningen, men sorter på mere end en kolonne
Jeg ville sortere efter en rullemenu og derefter efter dato.
For at gøre det skal du ændre linjen “range.sort” for en af Cristians eller geekspotzs kodestykker som sådan:
// 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}]);
Forskellen er at tilføje de lige parenteser omkring hele din sætning (array) og adskille sorteringerne med kommaer.
Sorter kodeændring trukket fra Serge “s Stack Overflow svar her : Automatisk sortering på ark
Svar
Her oprettede jeg et automatisk sorteringsscript og regneark (det kræver lidt arbejde på arket, en kopipasta af koden og indstilling af dine intervaller. Det er baseret på flere stackexchange-svar
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Dens post og får værdien af det interval, du fokuserer på ved sidste redigering, sammenlign det med værdi nu efter den faktiske redigering, og hvis forskellige sorterer det tabellen.
Svar
Google Sheets har Filtre netop af denne grund og gør det kræver ikke, at du opretter et nyt ark i dit dokument.
Dokumentation: https://support.google.com/docs/answer/3540681
Svar
Det kan gøres ved hjælp af Google App Script. Scriptet sorteres automatisk, hver gang der sker en ændring i arkdata.
På dit Google Sheet:
Vælg Værktøjer -> Script Editor, og indsæt nedenstående script, og gem.
Erstat variablerne SHEET_NAME, SORT_DATA_RANGE og SORT_ORDER med tilsvarende værdier.
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."); }
Kilde: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
f.eks.
= sort(Sheet1!A:C; 3; TRUE)