3

我需要帮助以获取特定列(B列)的唯一排序值列表。如何从Google电子表格的列中的所有值中使用javascript获取排序的唯一值

这是我的尝试(它不起作用),你能帮我找到错误吗?

我没能获得在[对象]格式正确的范围内......

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); 
} 

解决方案通过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) 
} 
+0

您可以使用[... new set(array_to_sort)]获取数组的所有独特元素 – Bellian

+0

检查rngB是否包含正确的值。 –

+0

@Bellian我不明白 –

回答

0
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'; 
    } 
} 

这是我修改的代码。

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; 
} 
+0

我有那里的String()。trim()函数在另一个应用程序,所以你可能不希望它在那里。我刚刚删除它,但注意到你已经在这里。 – Cooper

相关问题