Сценарии приложения Google - Почему моя функция onEdit () занимает так много времени? - PullRequest
0 голосов
/ 16 апреля 2019

Хорошо, поэтому мне нужно выбрать диапазон, который составляет около 350 строк и 4 столбцов, взять значения из него и при каждом изменении в моем раскрывающемся меню я ищу и сравниваю строки и столбцы из выбранного диапазона, и я нахожусовпадения для того, чтобы отфильтровать выпадающие данные DataValidation.Но для каждого выпадающего изменения требуется около 5-6 секунд.

Я даже пытался выбрать только небольшой диапазон, и он все еще использует то же количество времени.Здесь, в примере кода, я беру диапазон около 20 строк, и это все еще занимает 5-6 секунд для завершения.

function onEdit() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EAC Input");
  var dataSS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resource names");

  var activeCell = ss.getActiveCell();
  var column = activeCell.getColumn();
  var lastRow = dataSS.getLastRow();

  if(column == 1 || column == 2 || column == 3 || column == 4 && activeCell.getRow() > 5) {

    var makeValue = activeCell.getValue(); 

    if(makeValue == "" || makeValue == "WORKSTREAM:" || !isNaN(parseFloat(makeValue)) && isFinite(makeValue))
    {
      return;
    }

    var validationRange =  dataSS.getRange("A36:D55").getValues();

    var filteredRangeOfDepartments = [];
    var filteredRangeOfPositions = [];
    var filteredRangeOfEmployees = [];

    for(var i = 0; i < validationRange.length; i++)
    {      
      var rangeAtZero = validationRange[i][0];
      var rangeAtOne = validationRange[i][1];
      var rangeAtTwo = validationRange[i][2];

      if(rangeAtZero== makeValue)
      {
        filteredRangeOfDepartments.push(rangeAtOne);         
      }      
      if(rangeAtOne == makeValue && rangeAtZero == activeCell.offset(0, -1).getValue())
      {
         filteredRangeOfPositions.push(rangeAtTwo);        
      }
      if(rangeAtTwo == makeValue && rangeAtZero == activeCell.offset(0, -2).getValue() && rangeAtOne == activeCell.offset(0, -1).getValue())
      {
         filteredRangeOfEmployees.push(validationRange[i][3]);        
      }
    }

    if(column == 1)
    {
    var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(filteredRangeOfDepartments, true).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);
    }
    if(column == 2)
    {
    var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(filteredRangeOfPositions, true).build();
    activeCell.offset(0, 1).setDataValidation(validationRule);
    }
    if(column == 3)
    {
      filteredRangeOfEmployees.push("TBC");
    var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(filteredRangeOfEmployees, true).build();`enter code here`
    activeCell.offset(0, 1).setDataValidation(validationRule);
    }  
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...