Sanotaan, että haluan Google Sheetsin lajittelevan tietyt tiedot, esimerkiksi sarake C
.
Kuinka se tehdään?
Tiedän, että voin lajitella tiedot manuaalisesti napsauttamalla hiiren kakkospainikkeella ja valitsemalla Lajittele tiedot , mutta en minä etsit.
Vastaus
Voit käyttää sort()
-toiminto , mutta sinulla on oltava tietosi yhdessä paikassa ja automaattisesti lajiteltu kopio tiedoista toisessa paikassa.
Esimerkiksi sanoa Minulla on Sheet1 tietojeni kanssa:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Sitten asetan Sheet2-soluun A1 tämän funktion:
= sort (Sheet1! A: C, 3, TRUE)
Tämä näyttää tietoni, mutta lajiteltu sarakkeen mukaan C (kolmas sarake), nouseva.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Kommentit
Vastaa
On myös mahdollista käyttää Google Apps -skriptejä tietojen automaattisen lajittelun aikaansaamiseksi.
Tämä voi olla vaikeampi saavuttaa ja alttiimpi virhealttiille (käytän edelleen William Jacksonin ratkaisua, +1 BTW), mutta ajattelin, että se oli tarpeeksi kiinnostava näyttää.
Minulla on taulukko, joka näyttää tältä:
Lisäsin uuden komentosarjan seuraavasti:
- siirry valikossa kohtaan Työkalut -> Komentosarjaeditori …
- valitse Luo uusi projekti
-
näkyviin tulevaan tyhjään koodiikkunaan liitä seuraava koodi, joka suoritetaan automaattisesti aina, kun solua muokataan:
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 } ); } }
-
palaa taululle ja aloita pelaamista arvojen kanssa nähdäksesi taulukon lajittelun automaattisesti joka kerta
Huomaa:
komentosarjan yläpuolella,
- arvo
4
edustaa sarakkeen D hakemistoa (sarakeValue
– jotka lajitellaan) - arvo
"B3:E9"
edustaa taulukon aluetta (ilman otsikkoriviä)
Taulukkosi eroaa todennäköisesti omasta, joten nämä arvot on muutettava vastaavasti.
Kommentit
- Yritin sinun [muokattu] -toimintoa onEdit ( tapahtuma) {var sheet = event.source.getActiveSheet (); var editedCell = arkki.getActiveCell (); var columnToSortBy = 4; var tableRange = ” A2: F99 ”; if (editedCell.getColumn () == columnToSortBy) {var-alue = sheet.getRange (tableRange); range.sort ({sarake: columnToSortBy}); }}, mutta virheilmoitus jatkuu: TypeError: Ominaisuutta ” source ” ei voida lukea määrittelemättömästä. (rivi 2), joka on seuraava koodi: var sheet = event.source.getActiveSheet (); mitään ideoita? NM, saa virheen vain suoritettaessa komentosarjasivulta, mutta se toimii oikein varsinaisella levityssivulla
- mutta virheilmoitus jatkuu: TypeError: Ominaisuus ” lähde ” määrittelemättömästä. (rivi 2), joka on seuraava koodi: var sheet = event.source.getActiveSheet (); mitään ideoita? NM, saa virheen vain suoritettaessa komentosarjasivulta, mutta se toimii oikein varsinaisessa laskentataulukossa. Kysy nyt … sen lajittelusta A-Z, kuinka voin muuttaa sen automaattiseksi lajitteluksi Z-A? kiitos
- @ drizzt09 Kun soitat menetelmää, määrität todennäköisesti
null
parametrilleevent
, joka muuten on oikein Google Spreadsheet -infrastruktuurin täyttämä, kun todellinen tapahtuma käynnistyy. - @ drizzt09 muuttaa lajittelujärjestystä, muuta riviä
range.sort
seuraavasti:range.sort( { column : columnToSortBy, ascending: false } );
. Lisää lajitteluvaihtoehtoja on osoitteessa developers.google.com/apps-script/class_range#sort - @ w0lf Kiitos, että toimi täydellisesti. nyt haluaisin lisätä siihen tai saada erillisen toiminnon, joka suorittaa täsmälleen saman toiminnon, mutta auki tai päivitä. Joten kun avaan / päivitän excel-taulukon, se lajittelee automaattisesti 4. sarakkeen laskevasti samalla tavalla kuin muokatessani sarakkeen 4 koodia nykyisellä koodillasi. Kiitos
Vastaa
Toinen vaihtoehto ilman komentosarjaa on:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Alue on rajoitettu (A1: C3), koska missä järjestys on nouseva, tyhjät merkinnät näkyvät ensin.
Kommentit
- Voisitteko kertoa minulle, mihin minun pitäisi laittaa tämä?
- Voit käyttää
SELECT * WHERE C <> '' ORDER BY C
ohittaaksesi tyhjät merkinnät, voit käyttää riittävän suurta aluetta sisällyttääksesi kaikki nykyiset ja tulevat rivit.
Vastaa
Täällä ”on yleinen komentosarja, joka lajittelee automaattisesti ensimmäisen sarakkeen perusteella ja ottaa otsikkorivin.
Komentosarjan luominen:
- Siirry valikossa kohtaan Työkalut -> Komentosarjaeditori …
Liitä tyhjään koodi-ikkunaan seuraava koodi, joka toimii automaattisesti aina, kun solua muokataan:
// 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 } ); } }
Kommentit
- Huomasin, että minun piti
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sen sijaan, mitä ’ täällä on. - Tämä toimii hyvin, mutta miten voin muokata tätä, jotta se lajitellaan vain yhdelle arkille dokumentissa?
- ei ’ ei näytä toimivan
vastaus
Usi ng komentosarjaratkaisu, mutta lajittele useammassa kuin yhdessä sarakkeessa
Halusin lajitella pudotusvalikkosarakkeen ja sitten päivämäärän mukaan.
Voit tehdä niin muokkaamalla joko Cristianin tai geekspotzin koodikatkelmien riviä ”range.sort” seuraavasti:
// 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}]);
Erona on lisätä suorat sulkeet koko käskysi (matriisi) ympärille ja erottaa lajikkeet pilkuilla.
Lajittelukoodin muokkaus on vedetty Serge: n pinon ylivuotovastauksesta tähän : Automaattinen lajittelu arkkeille
Vastaa
Täällä olen luonut automaattinen lajittelukomentosarja ja laskentataulukko (se vaatii vähän työtä arkilla, koodin kopioimisen ja alueiden asettamisen. Se perustuu useisiin pinonvaihtovastauksiin
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Sen tietue ja sen alueen arvo, jolle viimeksi muokkaat, vertaa sitä nyt todellisen muokkauksen jälkeiseen arvoon ja jos eri tavalla se lajittelee taulukon.
Vastaa
Google Sheets -palvelussa on Suodattimet juuri tästä syystä ja tekee Älä ”vaadi uutta taulukkoa asiakirjaan.
Dokumentaatio: https://support.google.com/docs/answer/3540681
Vastaa
Se voidaan tehdä Google App Scriptillä. Skripti lajitellaan automaattisesti aina, kun taulukon tiedoissa tapahtuu muutoksia.
Google-taulukossasi:
Valitse Työkalut -> Komentosarjaeditori ja liitä alla oleva komentosarja ja tallenna.
Korvaa muuttujat SHEET_NAME, SORT_DATA_RANGE ja SORT_ORDER vastaavilla arvoilla.
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."); }
Lähde: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
esim.
= sort(Sheet1!A:C; 3; TRUE)