2013-04-03 59 views
0

我试图完成的是从A列中的人员列表中随机选择,但是一旦他们被选中,他们应该从列表中删除。我们的想法是建立一个名单,将随机挑选的人每星期 - 但除去一旦他们被挑选的人(并重新创建阵列一旦其0)运行随机从随机列表中选择并减少下一个选择的结果

Example 

Paul 
David 
John 
Matt 

(A1:A4),我可能会得到David作为我的选择,但是下一次我运行该函数时,Array将从A1:A4再次构建 - 因此David不会被删除。

我尝试添加第二列跟踪选秀权,然后从一个数组删除它们,但我只能从数组中删除1个值,而不保留做了什么

Example 

List of Users  Tracking  Result (print all values) 
Paul        John David,Paul,Matt 
David    John   David Paul,Matt 
John    David   Matt Paul,John 
Matt    Matt   David Paul,John 

结果虽心不是所有的价值观,我包括所有的价值,以显示我有的逻辑问题。在跟踪栏中,我留下了第一个空白,以便跟踪字段中的值是我从结果中获得的值(结果只能正常获得1个值)。所以B2 = C1

我可以得到一些关于如何去做这个。 (谷歌 - 应用程序 - 脚本)

对于那些要求这里的代码是

function random(a,b) { 
    var listPeople = new Array(); 
    for (var i = 0; i < a.length; i++) { 
    var row = a[i]; 
    for (var j = 0; j < row.length; j++) { 
     var value = row[j]; 
     if (value) { 
     listPeople.push(value); 
     } 
    } 
    } 
//deleting someone 
    var trackPeople = listPeople.slice(0); 
    for (var i = 0; i < trackPeople.length; i++) { 
    if (trackPeople[i] == b) { 
     trackPeople.splice(i,1); 
    } 
    } 
// Returning a persons name 
    if (trackPeople.length > 0) { 
    var pick = Math.floor(Math.random() * trackPeople.length); 
    return trackPeople[pick]; 
    } 
} 
+0

请添加您当前的脚本,以便我们添加改进。除此之外,您在互联网上的最佳搜索可能是以某种形式寻找随机选取的内容,只有当您明白逻辑后才能将其转化为应用程序脚本。如果您需要学习应用程序脚本的一般指南,请查找... –

+0

没有您的代码,很难提供帮助。我们将不得不完全为您编写它: -/ –

+0

将代码添加到原始帖子中。 – user2240235

回答

2

我是拼凑起来的这个下面,使用一些代码的。它期望一个带有空白列A的电子表格;将单元格B1中的随机选择的名称放入,然后将已耗尽的列表重新写入列A.

function pickAPerson(){ 
    var ss = SpreadsheetApp.openById("your_spreadsheet_id_here").getSheets()[0]; 
    var completeList = [["Paul"],["David"],["John"],["Matt"]]; //this list can be as long as necessary // you could also get this list from another spreadsheet range, for example 
    var currentList = []; 
    var columnWithNames = "A"; // expects: start in row 1; no empty cells 
    try{var populatedRange = getPopulatedRange(ss,columnWithNames); currentList = populatedRange.getValues(); populatedRange.clear()} 
    catch (e) {currentList = completeList; Logger.log(e)} //if the ss list is exhausted, currentList will be filled from the completList array 
    var randomIndex = Math.floor(Math.random() * currentList.length); 
    var theChosenOne = currentList.splice(randomIndex,1) 
    if(currentList.length>0) 
    ss.getRange(1,1,currentList.length,1).setValues(currentList); 
    ss.getRange("B1").setValue(theChosenOne) 
} 

function getPopulatedRange(ss,column) { //Returns the range in a single column from row 1 to the last populated cell in that column 
    var lastRow = ss.getMaxRows(); 
    var values = ss.getRange(column + "1:" + column + lastRow).getValues(); 
    for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {} 
    return ss.getRange(column + "1:" + column + lastRow); 
} 
+0

非常感谢大卫! – user2240235