Kuinka voin tehdä joitakin tietoja Google Sheetsin automaattisessa lajittelussa?

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

  • Parametrit on erotettava puolipisteellä

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

  • @Petr Se toimii minulle hienosti pilkuilla.
  • @ user17634: Se riippuu kieliasetuksista.
  • Tämän lähestymistavan ongelmana on, että et voi siirtää kohdetta # 3 kohtaan # 1 (se kopioi # 3).

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ä:

automaattinen lajittelulomake

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 (sarake Value – 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 parametrille event, 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/

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *