2013-04-03 95 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