Jak mohu provést některá data v automatickém třídění Tabulek Google?

Řekněme, že chci, aby Tabulky Google automaticky třídily některá data, například sloupec C.

Jak to provedu?

Vím, že mohu data ručně seřadit kliknutím pravým tlačítkem a výběrem možnosti Seřadit data , ale to není to, co dělám hledáte.

Odpověď

Můžete použít funkce , ale musíte mít svá data na jednom místě a automaticky tříděnou kopii těchto dat na jiném místě.

Například řekněme Mám List1 s mými daty:

 | A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3 

Pak v Sheet2, buňka A1, bych dal tuto funkci:

= seřadit (List1! A: C, 3, PRAVDA)

Zobrazí se moje data, ale seřazená podle sloupce C (třetí sloupec), vzestupně.

 | A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3 

Komentáře

  • Parametry musí být odděleny středníkem

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

  • @Petr Čárky mi fungují dobře.
  • @ user17634: To záleží na vašem národním nastavení.
  • Problém s tímto přístupem spočívá v tom, že nemůžete přesunout položku č. 3 na pozici položky č. 1 (duplikuje ji č. 3).

Odpovědět

K dosažení automatického třídění na místě je také možné použít skripty Google Apps .

To může být obtížněji dosažitelné a náchylnější k chybám (stále bych hledal řešení Williama Jacksona, +1 BTW), ale myslel jsem si, že to bylo dost zajímavé ukázat.

Mám list, který vypadá takto:

list pro automatické třídění

Přidal jsem nový skript pomocí těchto kroků:

  • v nabídce přejděte na Nástroje -> Editor skriptů …
  • vyberte Vytvořit nový projekt
  • do prázdného okna s kódem, které se zobrazí, vložte následující kód, který se spustí automaticky vždy, když buňka je upravena:

    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 } ); } } 
  • vraťte se na tabulku a začněte hrát s hodnotami, abyste viděli automatické třídění tabulky pokaždé

Poznámka:

V nad skriptem,

  • hodnota 4 představuje index sloupce D (sloupec Value – sloupec v tomto případě bude tříděno)
  • hodnota "B3:E9" představuje rozsah tabulky (kromě řádku záhlaví)

Vaše tabulka se bude pravděpodobně lišit od mé, takže tyto hodnoty by měly být odpovídajícím způsobem upraveny.

Komentáře

  • Zkoušel jsem vaši [upravenou] funkci onEdit ( událost) {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 ({sloupec: columnToSortBy}); }} ale stále se zobrazuje chyba: TypeError: Nelze přečíst vlastnost “ source “ z nedefinované. (řádek 2), což je následující kód: var sheet = event.source.getActiveSheet (); nějaké nápady? NM, chyba se zobrazí pouze při spuštění ze stránky skriptu, ale na skutečné tabulce funguje správně
  • , ale stále se zobrazuje chyba: TypeError: Nelze přečíst vlastnost “ source “ z undefined. (řádek 2), což je následující kód: var sheet = event.source.getActiveSheet (); nějaké nápady? NM, zobrazí se chyba pouze při spuštění ze stránky skriptu, ale ve skutečné tabulce funguje správně. Nyní otázka … jeho třídění A-Z, jak to změním na automatické třídění Z-A? díky
  • @ drizzt09 Když voláte metodu, pravděpodobně zadáte null pro parametr event, který je jinak správně naplněna infrastrukturou tabulkového procesoru Google při spuštění skutečné události.
  • @ drizzt09 pro změnu pořadí řazení změňte řádek range.sort takto: range.sort( { column : columnToSortBy, ascending: false } ); . Další možnosti řazení naleznete v developers.google.com/apps-script/class_range#sort
  • @ w0lf Děkuji, že to fungovalo perfektně. Nyní bych k tomu chtěl přidat nebo mít samostatnou funkci, která provádí přesně stejnou funkci, ale při otevření nebo obnovení. Takže když otevřu / obnovím list aplikace Excel, automaticky seřídí 4. sloupec sestupně stejně, jako když upravuji kód ve sloupci 4 s vaším aktuálním kódem. Díky

Odpověď

Další možností bez skriptu je:

=QUERY(A1:C3,"SELECT * ORDER BY C") 

Rozsah je omezen (A1: C3), protože tam, kde je pořadí vzestupně, se nejprve zobrazí prázdné položky.

Komentáře

  • Mohli byste mi prosím dát vědět, kam to mám dát?
  • Můžete použít SELECT * WHERE C <> '' ORDER BY C pokud chcete ignorovat prázdné položky, můžete použít dostatečně velký rozsah, aby zahrnoval všechny aktuální a budoucí řádky.

Odpovědět

Zde je obecný skript, který se automaticky roztřídí na základě 1. sloupce a předpokládá řádek záhlaví.

Vytvoření skriptu:

  • V nabídce přejděte do nabídky Nástroje -> Editor skriptů …

Do prázdného okna kódu vložte následující kód, který se spustí automaticky při každé úpravě buňky:

 // 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 } ); } } 

Komentáře

  • Zjistil jsem, že musím var sheet = SpreadsheetApp.getActiveSpreadsheet(); namísto toho, co je zde ‚.
  • Funguje to skvěle, ale jak to mohu upravit, takže se to v Docu seřadí pouze na jeden list?
  • Zdá se, že ‚ nefunguje

Odpovědět

Usi Řešení skriptu, ale seřadit podle více než jednoho sloupce

Chtěl jsem seřadit podle sloupce rozevírací nabídky a poté podle data.

Chcete-li tak učinit, upravte řádek „range.sort“ fragmentů kódu Cristian nebo geekspotz takto:

// 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}]);

Rozdíl spočívá v přidání přímých závorek kolem celého vašeho příkazu (pole) a oddělení třídění čárkami.

Úpravy kódu řazení vytažené z Sergeovy přetečení zásobníku zde : Automatické třídění na listech

Odpověď

Zde jsem vytvořil automatické třídění skriptu a tabulky (vyžaduje to trochu práce s tabulkou, kopírování, vložení kódu a nastavení vašich rozsahů. Je založeno na vícenásobné odpovědi zásobníku

https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0

Jeho záznam a získá hodnotu rozsahu, na který se zaměřujete při poslední úpravě, porovná s hodnotou nyní po skutečné úpravě a pokud different it sort the table.

Odpověď

Tabulky Google mají filtry právě z tohoto důvodu a dělá n „Nevyžaduji, abyste v dokumentu vytvořili nový list.

Dokumentace: https://support.google.com/docs/answer/3540681

odpověď

Lze to provést pomocí Google App Script. Skript se automaticky seřadí, kdykoli dojde ke změně dat listu.

V Tabulce Google:
Vyberte Nástroje -> Editor skriptů a vložte následující skript a uložte jej.

Nahraďte proměnné SHEET_NAME, SORT_DATA_RANGE a SORT_ORDER odpovídajícími hodnotami.

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."); } 

Zdroj: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *