Mondjuk azt, hogy azt akarom, hogy a Google Táblázatok automatikusan rendezzenek néhány adatot, például a C
oszlopot.
Hogyan tudom ezt megtenni?
Tudom, hogy az egér jobb gombjával és az Adatok rendezése kiválasztásával manuálisan rendezhetem az adatokat, de nem ezt keres.
Válasz
Használhatja a elemet a sort()
függvény , de az adatoknak egy helyen kell lenniük, az adatoknak pedig egy másik helyen automatikusan rendezett másolatával.
Például mondjuk Van az 1. adatlap az adataimmal:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Ezután a 2. lap A1-es cellájába ezt a függvényt tenném:
= sort (1. lap! A: C, 3, IGAZ)
Ez az adataimat jelenítené meg, de oszlopok szerint rendezve C (harmadik oszlop), növekvő.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Megjegyzések
Válasz
A Google Apps-szkriptek használatával is elérheti az adatok automatikus helybeli rendezését.
Ezt nehezebben lehet elérni, és nagyobb a hibára való hajlam (még mindig William Jackson megoldását választanám, +1 BTW), de azt gondoltam, hogy elég érdekes volt megmutatni.
Van egy olyan lapom, amely így néz ki:
Új parancsfájlt adtam a következő lépésekkel:
- a menüben lépjen az Eszközök -> Szkriptszerkesztő …
- elemre válassza a Létrehozás lehetőséget egy új projekt
-
a megjelenő üres kódablakba illessze be a következő kódot, amely automatikusan fut, amikor egy cella szerkesztve van:
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 } ); } }
-
menj vissza a lapra, és kezdd el játszani az értékeket, hogy a táblázat minden alkalommal automatikusan rendeződjön
Megjegyzés:
A fenti szkript,
- az érték
4
a D oszlop indexét jelöli (aValue
oszlop – a ezen rendezni fogják) - az
"B3:E9"
érték a táblázat tartományát jelöli (a fejlécsor kivételével)
A táblázata valószínűleg különbözik az enyémtől, ezért ezeket az értékeket ennek megfelelően kell beállítani.
Megjegyzések
- Kipróbáltam az Ön szerkesztett funkcióját az [Edit] ( esemény) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var oszlopToSortBy = 4; var tableRange = ” A2: F99 “; if (editedCell.getColumn () == columnToSortBy) {var tartomány = sheet.getRange (tableRange); range.sort ({oszlop: columnToSortBy}); }}, de továbbra is hibaüzenetet kap: TypeError: A ” source ” tulajdonságot nem lehet meghatározatlanul olvasni. (2. sor), amely a következő kód: var sheet = event.source.getActiveSheet (); bármilyen ötletet? NM, csak akkor kapja meg a hibát, amikor a szkript oldaláról fut, de a tényleges spreadshee-n megfelelően működik
- de továbbra is hibaüzenetet kap: TypeError: Nem olvasható a ” forrás ” undefined-ből. (2. sor), amely a következő kód: var sheet = event.source.getActiveSheet (); bármilyen ötletet? NM, csak akkor kapja meg a hibát, ha a parancsfájl oldaláról futtat, de a tényleges táblázatban megfelelően működik. Most tegye fel a kérdést … az A-Z rendezése, hogyan változtathatom meg a Z-A automatikus rendezésére? köszi
- @ drizzt09 A módszer meghívásakor valószínűleg megadja a
null
értéket aevent
paraméterhez, amely egyébként megfelelő amelyet a Google Spreadsheet infrastruktúra tölt be, amikor egy valós esemény vált ki. - @ drizzt09 a rendezési sorrend megváltoztatásához módosítsa a
range.sort
sort:range.sort( { column : columnToSortBy, ascending: false } );
. További rendezési lehetőségekért lásd: developers.google.com/apps-script/class_range#sort - @ w0lf Köszönjük, hogy tökéletesen működött. most szeretnék hozzáfűzni, vagy lenne egy külön funkcióm, amely pontosan ugyanazt a funkciót látja el, de nyitva vagy frissítve. Tehát amikor kinyitom / frissítem az excel lapot, akkor a 4. oszlop automatikus rendezése csökkenő módon csökken, mint amikor a 4. oszlopban lévő kódot szerkesztem az aktuális kóddal. Köszönet
Válasz
Egy másik lehetőség szkript nélkül:
=QUERY(A1:C3,"SELECT * ORDER BY C")
A tartomány korlátozott (A1: C3), mert ahol a sorrend növekszik, az üres bejegyzések jelennek meg először.
Megjegyzések
- Kérem, tudassa velem, hova tegyem?
- Használhatja a
SELECT * WHERE C <> '' ORDER BY C
az üres bejegyzések figyelmen kívül hagyásához, akkor elég nagy tartományt használhat az összes jelenlegi és jövőbeli sor felvételéhez.
Válasz
Itt egy általános szkript, amely az 1. oszlop alapján automatikusan válogat és felvesz egy Fejléc sort.
Szkript létrehozása:
- A menüben válassza az Eszközök -> Szkriptszerkesztő menüpontot.
Az üres kódablakba illessze be a következő kódot, amely automatikusan elindul, ha egy cellát szerkesztenek:
// 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 } ); } }
Megjegyzések
- Megállapítottam, hogy
var sheet = SpreadsheetApp.getActiveSpreadsheet();
az itt található ‘ s helyett. - Ez nagyszerűen működik, de hogyan tudom ezt szerkeszteni, hogy csak egyetlen lapra válogasson a doc-ban?
- úgy tűnik, hogy ‘ nem működik
Válasz
Usi ng a szkript megoldást, de egynél több oszlopban rendezze
Rendezni akartam egy legördülő menü oszlop, majd dátum szerint.
Ehhez módosítsa a Cristian vagy a geekspotz kódrészletek “range.sort” sorát, így:
// 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}]);
A különbség az, hogy az egész utasítás (tömb) köré egyenes zárójeleket teszünk, és vesszőkkel választjuk el a rendezéseket.
A rendezési kód módosítása a Serge verem túlcsordulási válaszából származik itt : A lapok automatikus rendezése
Válasz
Itt hoztam létre egy automatikus szkript és táblázat szétválogatása (egy kis munkát igényel a munkalapon, a kód másolati beillesztését és a tartományok beállítását. Ez több stackexchange válaszon alapul
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Rekordja, és megkapja annak a tartománynak az értékét, amelyre a legutóbbi szerkesztéskor összpontosít, hasonlítsa össze az értékkel a tényleges szerkesztés után, és ha különbözik, rendezi a táblázatot.
Válasz
A Google Táblázatok szűrőkkel rendelkezik éppen ezért és megteszi n “nem szükséges, hogy új lapot készítsen a dokumentumában.
Dokumentáció: https://support.google.com/docs/answer/3540681
Válasz
Meg lehet csinálni a Google App Script segítségével. A szkript automatikusan rendezni fog, ha a lap adatai változnak.
A Google Sheet-en:
Válassza az Eszközök -> Szkriptszerkesztő elemet, illessze be az alábbi parancsfájlt, majd mentse.
Cserélje le a SHEET_NAME, SORT_DATA_RANGE és SORT_ORDER változókat a megfelelő értékekre.
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."); }
Forrás: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
pl.
= sort(Sheet1!A:C; 3; TRUE)