Хорошо, поэтому мне нужно выбрать диапазон, который составляет около 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);
}
}
}