简体   繁体   中英

How to get sorted unique values from all the values of a column in Google spreadsheet using javascript

I need help to get a list of unique sorted value of a specific column (column B).

This is my try (It doesn't work), can you help me to find the error?

I'm not able to get the correct range in [object] format...

function onlyUnique(value, index, self) { 
return self.indexOf(value) === index;
}  

function UniqueRange()  {
var s = SpreadsheetApp.getActiveSpreadsheet();
var sht = s.getSheetByName('Prova')
var drng = sht.getDataRange();
var rng = sht.getRange(2,2, drng.getLastRow()-1,1);
var rngA = rng.getValues();
var shtout = s.getSheetByName('Nuovo');
var rngout = shtout.getRange(2,1,rngA.length,1)
var rngB = rngout.setValues(rngA);
var i = 0; i < rngA.length; i++
var rngB = rngB[i];  
var unique = rngB.filter( onlyUnique ); 
}

Solution by Bellian:

function onlyUnique(value, index, self) { 
return self.indexOf(value) === index;
} 
function uniquevalues(){
var s = SpreadsheetApp.getActiveSpreadsheet();  
var sht = s.getSheetByName('Prova')  
var drng = sht.getDataRange();
var rng = sht.getRange(2,2, drng.getLastRow()-1,1);  //range that contain all values
var rngA = rng.getValues();
var unique = [];
 for(var i = 0; i < rngA.length; i++) {
var unique = unique.concat(rngA[i+1]);
} 
unique = unique.filter(onlyUnique);
Logger.log(unique)
}
function getUniqueSortedArray(sheetname,column,datastartrow) 
{
  if(sheetname && column && datastartrow)
  {  
    var ss=SpreadsheetApp.getActive();
    var cntSh=ss.getSheetByName(sheetname);
    var cntRg=cntSh.getDataRange().sort({column:column,ascending:true});
    var vA=cntRg.getValues();
    var uiA=[];
    for(var i=datastartrow-1;i<vA.length;i++)
    {
      if(uiA.indexOf(vA[i][column-1])==-1)
      {
        uiA.push(vA[i][column-1]);
      }
    }
    return uiA;
  }
  else
  {
    return 'Invalid Inputs';
  }
}

And this is my modification of your code.

function UniqueSortedRange()  
{
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getSheetByName('Prova')
  var rg=sh.getDataRange().sort({column:2,ascending:true});
  var vA=rg.getValues();
  var sh0=ss.getSheetByName('Nuovo');
  var luneeko=[];
  for(var i=1;i<vA.length;i++)
  {
    if(luneeko.indexOf(vA[i][1])==-1)
    {
      luneeko.push(vA[i][1]);
    }
  }
  return luneeko;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM