Я пытаюсь создать сеанс ревизии [система регистрации] простая тестовая версия здесь для использования в школе.Существует колонка нераспределенных студентов и колонка выделенных студентов.Это используется в качестве источника для выпадающих списков проверки.
Учителя могут выбрать ученика для своего регистра из выпадающего списка.Когда ученик выбран, он становится недоступным для других учителей, удаляя его из списка, и его имя добавляется в назначенный список.
Если учитель удаляет ученика из своего списка, ученик будет перемещен обратнов нераспределенный столбец, позволяющий другому учителю выбрать его / ее.
Я достиг определенного прогресса и могу удалить учащегося из нераспределенного списка и добавить его в выделенный список.
Я изо всех сил стараюсь сделать так, чтобы освобождение работало.
Если учитель удаляет учащегося из их списка, я думаю, что это должно произойти:
1 - создать плоский массив из сетки всех учениковвыбран всеми учителями.2- сделать массив всех учеников в выделенном столбце.
3- ученик, не входящий в массив из сетки всех учителей, но в списке назначенных учеников, был только что удален, удалитьэтого студента из выделенного и добавьте их обратно в нераспределенный столбец.
Функция вызывается событием триггера onedit.По какой-то причине, функция, которую я использовал для выравнивания массива, не работает, даже несмотря на то, что запись в логе подсказывает, что она должна.
Мой код приведен ниже, (1) кто-нибудь может увидеть, что я сделал неправильно?(2) увидеть лучший способ сделать то, что я пытаюсь сделать?(мой путь кажется очень длинным)
function flatten(arrayOfArrays)
{
Logger.log("concat");
var array = [].concat.apply([], arrayOfArrays);
return array;
}
function search(searchString) //returns array row index
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var column =11; //column Index
var columnValues = sheet.getRange(1, column, sheet.getLastRow()).getValues(); //1st is header row
var searchResult = -1;
for (var row = 1; row < columnValues.length; row ++)
{
if (columnValues[row][0]==searchString)
{
searchResult = row;
}
}
return searchResult;
}
function cellEdited(e)
{
}
function studentAllocated(e)
{
var range = e.range
var name = range.getValue();
var row = search(name) +1;
//remove name from to allocate column
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell = sheet.getRange("K"+row);
cell.deleteCells(SpreadsheetApp.Dimension.COLUMNS);
}
function studentDeallocated()
{
Logger.log("SDeallocated2");
//get all the names in the range of teachers
//compare with all the names in the assigned col
//the name that is not in the range of teachers but is in assigned col is the name that must be returned
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var assigned = sheet.getRange(2,12,sheet.getLastRow()).getValues();
var values = sheet.getRange(2,1,sheet.getLastRow(),3).getValues();//get all teachers registers
Logger.log(values);
var name = ""
Logger.log(flatten(assigned))
var nassigned = flatten(assigned);
var nvalues = flatten(values);
Logger.log("flat");
Loggger.log(nassigned);
var name = "";
for (var v=0; v< values.length; v++)
{
var found = false;
for (var a=0; a< assigned.length; a++)
{
Logger.log("loop iter: "+ a);
if(values[v]==assigned[a])
{
Logger.log("found name:" +values[v] );
found == true;
}
}
if (found == false);
name = values[v];
break;
//add name back to to allocate col
sheet.getRange(1, 11, sheet.getLastRow()).setValue("name");
}
}
function search(searchString) //returns array row index
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var column =11; //column Index
var columnValues = sheet.getRange(1, column, sheet.getLastRow()).getValues(); //1st is header row
var searchResult = -1;
for (var row = 1; row < columnValues.length; row ++)
{
if (columnValues[row][0]==searchString)
{
searchResult = row;
}
}
return searchResult;
}