Powiedzmy, że chcę, aby Arkusze Google automagicznie sortowały niektóre dane, na przykład kolumnę C
.
Jak to zrobić?
Wiem, że mogę ręcznie sortować dane, klikając prawym przyciskiem myszy i wybierając opcję Sortuj dane , ale nie o to mi chodzi szuka.
Odpowiedź
Możesz użyć w tym celu, ale musisz mieć swoje dane w jednym miejscu, a automatycznie posortowaną kopię tych danych w innym miejscu.
Na przykład powiedz Mam Sheet1 z moimi danymi:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Następnie w Sheet2, komórka A1, umieściłbym tę funkcję:
= sort (Sheet1! A: C, 3, TRUE)
To pokaże moje dane, ale posortowane według kolumn C (trzecia kolumna) rosnąco.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Komentarze
Odpowiedź
Możliwe jest również użycie skryptów Google Apps , aby uzyskać automatyczne sortowanie danych w miejscu.
Może to być trudniejsze do osiągnięcia i bardziej podatne na błędy (nadal bym wybrał rozwiązanie Williama Jacksona, +1 BTW), ale pomyślałem, że to było wystarczająco interesujące, aby pokazać.
Mam arkusz, który wygląda tak:
Dodałem nowy skrypt, wykonując następujące czynności:
- w menu przejdź do Narzędzia -> Edytor skryptów …
- wybierz Utwórz nowy projekt
-
w pustym oknie kodu, które się pojawi, wklej następujący kod, który zostanie uruchomiony automatycznie za każdym razem, gdy komórka jest edytowana:
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 } ); } }
-
wróć do arkusza i zacznij bawić się wartościami, aby za każdym razem automatycznie sortować tabelę
Uwaga:
W nad skryptem,
- wartość
4
reprezentuje indeks kolumny D (kolumnaValue
– na tym „będą sortowane”) - wartość
"B3:E9"
reprezentuje zakres tabeli (z wyłączeniem wiersza nagłówka)
Twoja tabela najprawdopodobniej będzie się różnić od mojej, więc te wartości powinny być odpowiednio dostosowane.
Komentarze
- Wypróbowałem twoją [edytowaną] funkcję onEdit ( event) {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}); }}, ale ciągle pojawia się błąd: TypeError: Nie można odczytać właściwości ” source ” z undefined. (linia 2), czyli następujący kod: var sheet = event.source.getActiveSheet (); jakieś pomysły? NM, błąd pojawia się tylko podczas uruchamiania ze strony skryptu, ale działa poprawnie na rzeczywistym arkuszu kalkulacyjnym
- , ale pojawia się błąd: TypeError: Cannot read property ” źródło ” z undefined. (linia 2), czyli następujący kod: var sheet = event.source.getActiveSheet (); jakieś pomysły? NM, pojawia się błąd tylko podczas uruchamiania ze strony skryptu, ale działa poprawnie w rzeczywistym arkuszu kalkulacyjnym. Teraz pytanie … jego sortowanie od A do Z, jak zmienić to na automatyczne sortowanie od Z do A? dzięki
- @ drizzt09 Kiedy wywołujesz metodę, prawdopodobnie podajesz
null
dla parametruevent
, który poza tym jest poprawnie zapełniane przez infrastrukturę Google Spreadsheet, gdy uruchamiane jest prawdziwe zdarzenie. - @ drizzt09 Aby zmienić kolejność sortowania, zmień wiersz
range.sort
w następujący sposób:range.sort( { column : columnToSortBy, ascending: false } );
. Aby uzyskać więcej opcji sortowania, zobacz developers.google.com/apps-script/class_range#sort - @ w0lf Dziękuję, że zadziałało idealnie. teraz chciałbym to dodać lub mieć osobną funkcję, która wykonuje dokładnie tę samą funkcję, ale przy otwieraniu lub odświeżaniu. Więc kiedy otworzę / odświeżę arkusz programu Excel, automatycznie posortuje czwartą kolumnę malejąco tak samo, jak podczas edycji kodu w kolumnie 4 z twoim bieżącym kodem. Dzięki
Odpowiedź
Inną opcją bez skryptu jest:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Zakres jest ograniczony (A1: C3), ponieważ w kolejności rosnącej puste pozycje pojawią się jako pierwsze.
Komentarze
- Czy możesz mi powiedzieć, gdzie mam to umieścić?
- Możesz użyć , aby zignorować puste wpisy, możesz użyć wystarczająco dużego zakresu, aby uwzględnić wszystkie aktualne i przyszłe wiersze.
Odpowiedź
Tutaj „ogólny skrypt, który będzie automatycznie sortował na podstawie pierwszej kolumny i zakłada wiersz nagłówka.
Aby utworzyć skrypt:
- W menu przejdź do Narzędzia -> Edytor skryptów …
W pustym oknie kodu wklej następujący kod, który uruchomi się automatycznie przy każdej edycji komórki:
// 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 } ); } }
Komentarze
- Okazało się, że muszę
var sheet = SpreadsheetApp.getActiveSpreadsheet();
zamiast tego, co ' znajduje się tutaj. - Działa świetnie, ale jak mogę to edytować, aby było sortowane tylko na jednym arkuszu w dokumencie?
- nie ' wydaje się działać
Odpowiedź
Usi z rozwiązaniem skryptu, ale sortować według więcej niż jednej kolumny
Chciałem posortować według kolumny menu rozwijanego, a następnie według daty.
Aby to zrobić, zmodyfikuj wiersz „range.sort” fragmentów kodu Cristian lub geekspotz, na przykład:
// 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}]);
Różnica polega na dodaniu nawiasów prostych wokół całej instrukcji (tablicy) i oddzieleniu sortowania przecinkami.
Modyfikacja kodu sortowania pobrana z odpowiedzi Sergea na przepełnienie stosu tutaj : Automatyczne sortowanie na arkuszach
Odpowiedź
Tutaj utworzyłem skrypt automatycznego sortowania i arkusz kalkulacyjny (wymaga trochę pracy nad arkuszem, skopiowania, wklejenia kodu i ustawienia zakresów. Jest oparty na odpowiedzi wielokrotnej wymiany stosów
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Jego rekord i wartość zakresu, na którym skupiłeś się przy ostatniej edycji, porównaj go z wartością teraz po rzeczywistej edycji i jeśli inaczej sortuj tabelę.
Odpowiedź
Arkusze Google mają Filtry z tego właśnie powodu i robi n „t wymaga utworzenia nowego arkusza w dokumencie.
Dokumentacja: https://support.google.com/docs/answer/3540681
Odpowiedź
Można to zrobić za pomocą Google App Script. Skrypt będzie automatycznie sortował po zmianie danych arkusza.
W arkuszu Google:
Wybierz Narzędzia -> Edytor skryptów, wklej poniższy skrypt i zapisz.
Zastąp zmienne SHEET_NAME, SORT_DATA_RANGE i SORT_ORDER odpowiednimi wartościami.
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."); }
Źródło: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
np.
= sort(Sheet1!A:C; 3; TRUE)