Jak mogę wprowadzić dane do automatycznego sortowania w Arkuszach Google?

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

  • Parametry należy rozdzielić średnikiem

    np. = sort(Sheet1!A:C; 3; TRUE)

  • @Petr U mnie działa dobrze z przecinkami.
  • @ user17634: To zależy od ustawień regionalnych.
  • Problem z tym podejściem polega na tym, że nie możesz przenieść przedmiotu nr 3 na pozycję nr 1 (to powiela nr 3).

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:

auto-sorting sheet

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 (kolumna Value – 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 parametru event, 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/

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *