ОП хочет создать матрицу рецензирования, в которой имена проверенных сотрудников выбираются случайным образом, рецензент не может проверить себя, и матрица заполнена для 46 сотрудников.
На основе предыдущего кода,эта версия создает массив имен сотрудников для каждой строки, в которой имя рецензента не включено в массив.Пять имен выбираются случайным образом и применяются к рецензенту.Затем цикл повторяется для каждого из 46 сотрудников.
Например, в первом раунде проверок «name01» опускается из массива сотрудников, из которых «проверяемые» выбираются случайным образом.Во втором раунде включается «name01», но «name02» исключается из массива сотрудников.И так далее, так что в каждом случае массив сотрудников, используемый для случайного выбора из пяти обзоров, всегда имеет длину 45 имен и исключает имя рецензента.
Случайный выбор имен, которые должны бытьОценка не обеспечивает равного и равномерного распределения отзывов среди сотрудников.Хотя каждый сотрудник проведет 5 проверок, некоторые сотрудники проверяются более 5 раз, некоторые - менее 5 раз, и (в зависимости от расположения солнца, луны и звезд) возможно, что некоторые из них не будут выбраны для проверки.
function s05648755803(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "Sheet3";
var sheet = ss.getSheetByName(sheetname);
// some variables
var randomcount = 30; // how many random names
var rowstart = 7; // ignore row 1 - the header row
var width = 5; // how many names in each row - 1/rater plus 5/ratee
var thelastrow = sheet.getLastRow();
//Logger.log("DEBUG:last row = "+thelastrow)
// get the employee names
var employeecount = thelastrow-rowstart+1;
//Logger.log("DEBUG: employee count = "+employeecount);//DEBUG
// get the data
var datarange = sheet.getRange(rowstart, 1, thelastrow - rowstart+1);
//Logger.log("DEBUG: range = "+datarange.getA1Notation());//DEBUG
var data = datarange.getValues();
//Logger.log("data length = "+data.length);
//Logger.log(data);
var counter = 0;
var newarray = [];
for (c = 0;c<46;c++){
counter = c;
for (i=0;i<data.length;i++){
if(i!=counter){
newarray.push(data[i]);
}
}
//Logger.log(newarray);
var rowdata = [];
var results = selectRandomElements(newarray, 5);
Logger.log(results)
rowdata.push(results);
var newrange = sheet.getRange(rowstart+c, 3, 1, 5);
newrange.setValues(rowdata);
// clear the arrays for the next loop
var newarray=[];
var rowdata = []
}
}
/*
// selectRandomElements and getRandomInt
// Credit: Vidar S. Ramdal
// https://webapps.stackexchange.com/a/102666/196152
*/
function selectRandomElements(fromValueRows, count) {
var pickedRows = []; // This will hold the selected rows
for (var i = 0; i < count && fromValueRows.length > 0; i++) {
var pickedIndex = getRandomInt(0, fromValueRows.length);
// Pick the element at position pickedIndex, and remove it from fromValueRows. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
var pickedRow = fromValueRows.splice(pickedIndex, 1)[0];
// Add the selected row to our result array
pickedRows.push(pickedRow);
}
return pickedRows;
}
function getRandomInt(min,
max) { // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
Снимок экрана # 1
Снимок экрана # 2