Замените выбранную опцию выпадающего списка соответствующим кодом onEdit на листах Google - PullRequest
2 голосов
/ 19 марта 2020

У меня есть файл с несколькими листами. В «J4: BA1000» некоторых из этих листов есть раскрывающиеся варианты, в которых пользователь может выбирать буквы от А до I. Чего я пытаюсь добиться, так это то, что при выборе выбранная опция заменяется соответствующим кодом: 1 9. С этим я опробовал приведенный ниже код, который я тоже видел по переполнению стека. Тем не менее, это не работает, и я не уверен, почему. Я полагаю, что логика c правильная, точные имена листов и условия.

Я обращаюсь к сообществу за советом.

Аналогично, я считаю, что есть улучшение того, как я делаю проверку имен листов, чтобы избежать многократного || (или), а также изменение значений, чтобы избежать множественных ifs.

Надеемся на ваш совет по этому вопросу. Спасибо!

function onEdit(e) {
  var SS = SpreadsheetApp.getActiveSpreadsheet();
  var ss = SS.getActiveSheet();
  var sheetName = ss.getName();
  var range = e.getRange;
  var targetrange = ss.getRange("J4:BA1000");
  var cell = range.getValue();

  if ( sheetName == "Kalos" || sheetName == "Logos" || sheetName == "Atos" || sheetName == "Manos" || sheetName == "Sodos" || sheetName == "Antos" || sheetName == "Minos" || sheetName == "Ambos" ) {
    if (Checkkk(targetrange,range)){
      if(cell == 'A'){range.setValue("1");}
      if(cell == 'B'){range.setValue("2");}
      if(cell == 'C'){range.setValue("3");}
      if(cell == 'D'){range.setValue("4");}
      if(cell == 'E'){range.setValue("5");}
      if(cell == 'F'){range.setValue("6");}
      if(cell == 'G'){range.setValue("7");}
      if(cell == 'H'){range.setValue("8");}
      if(cell == 'I'){range.setValue("9");}
    }
  }
}

function Checkkk(R1, R2) {

  var LR1 = R1.getLastRow();
  var Ro2 = R2.getRow();
  if (LR1 < Ro2) return false;


  var LR2 = R2.getLastRow();
  var Ro1 = R1.getRow();
  if (LR2 < Ro1) return false;

  var LC1 = R1.getLastColumn();
  var C2 = R2.getColumn();
  if (LC1 < C2) return false;

  var LC2 = R2.getLastColumn();
  var C1 = R1.getColumn();
  if (LC2 < C1) return false;

return true;

}

Итак, просто для объяснения логики c, когда я выполняю редактирование, он проверяет, находится ли отредактированная ячейка в нескольких листах в первом IF. Если TRUE, то с помощью функции Checkkk проверяется, находится ли отредактированная ячейка в пределах J4: BA1000. Если TRUE, то он проверяет, находится ли выбранное значение в пределах от A до I. Если TRUE, то он заменяет эту букву соответствующим кодом, который составляет от 1 до 9. Опять же, я думаю, что код логически корректен; Я просто не уверен, в чем здесь ошибка.

Спасибо!

1 Ответ

3 голосов
/ 19 марта 2020

Ответ:

Для получения диапазона объекта события необходимо использовать e.range, а не e.getRange.

Код:

Я также изменил ваше первоначальное условие проверки имени листа, чтобы сделать его немного более эффективным, и устранил необходимость в нескольких ifs в блоке, изменив последующие блоки if на else if s:

function onEdit(e) {  
  var sheetNames = ["Kalos", "Logos", "Atos", "Manos", "Sodos", "Antos", "Minos", "Ambos"];
  var SS = SpreadsheetApp.getActiveSpreadsheet();
  var ss = SS.getActiveSheet();
  var sheetName = ss.getName();

  if (!(sheetNames.indexOf(sheetName) > -1)) {
    return;
  }

  var range = e.range;
  var targetrange = ss.getRange("J4:BA1000");
  var cell = range.getValue();

  if (Checkkk(targetrange, range)){
    if(cell == 'A'){range.setValue("1");}
    else if(cell == 'B'){range.setValue("2");}
    else if(cell == 'C'){range.setValue("3");}
    else if(cell == 'D'){range.setValue("4");}
    else if(cell == 'E'){range.setValue("5");}
    else if(cell == 'F'){range.setValue("6");}
    else if(cell == 'G'){range.setValue("7");}
    else if(cell == 'H'){range.setValue("8");}
    else if(cell == 'I'){range.setValue("9");}
  }
}

Я совсем не изменил вашу Checkkk функцию.

Надеюсь, это вам пригодится!

Ссылки:

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