Ř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
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:
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 (sloupecValue
– 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 parametrevent
, 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/
např.
= sort(Sheet1!A:C; 3; TRUE)