Удаление элемента из списка проверки, когда он был выбран - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать сеанс ревизии [система регистрации] простая тестовая версия здесь для использования в школе.Существует колонка нераспределенных студентов и колонка выделенных студентов.Это используется в качестве источника для выпадающих списков проверки.

Учителя могут выбрать ученика для своего регистра из выпадающего списка.Когда ученик выбран, он становится недоступным для других учителей, удаляя его из списка, и его имя добавляется в назначенный список.

Если учитель удаляет ученика из своего списка, ученик будет перемещен обратнов нераспределенный столбец, позволяющий другому учителю выбрать его / ее.

Я достиг определенного прогресса и могу удалить учащегося из нераспределенного списка и добавить его в выделенный список.

Я изо всех сил стараюсь сделать так, чтобы освобождение работало.

Если учитель удаляет учащегося из их списка, я думаю, что это должно произойти:

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

1 Ответ

0 голосов
/ 07 июня 2018

Если вы можете жить с ошибкой проверки для всех назначенных ячеек, вы можете сделать это без какого-либо сценария, подобного следующему:

  1. В столбце A: список всех учащихся.
  2. В ячейку B1 введите формулу =filter(A:A,countif(C:C,A:A)=0).Столбец B будет содержать всех неназначенных учеников.
  3. В столбце C: C есть все задания, на которые ссылаются ячейки учителей.
  4. В ячейках учителей добавьте проверку списка на основе диапазона B: B.

Если вы не хотите, чтобы эта ошибка была, вы все равно можете создать отдельные списки проверки для каждого учителя, включая его ученика, вместе со всеми неназначенными учениками.

Примером является здесь .Оба подхода приведены на отдельных листах.

Редактировать: я только что заметил, что у каждого учителя должен быть список учеников.В таком случае вам нужно будет рассматривать запись каждого учителя как отдельного «учителя».Подход без ошибки проверки должен был бы поддерживать отдельный список проверки для каждой записи списка учителя (например, 3 учителя * 5 записей * 9 учеников составят 135 записей списка проверки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...