getSheetByName, кажется, получает ЛЮБОЙ активный лист - PullRequest
0 голосов
/ 09 мая 2019

Мне бы хотелось, чтобы следующая функция работала только на моей вкладке «Оценка», но она работает на всех вкладках.Я думал, что вызов листа по имени решит эту проблему, но это не так.Я очень плохо знаком с GAS и обладаю минимальным опытом кодирования, поэтому я, очевидно, просто что-то делаю не так.

Вот ссылка на мой лист

function onEdit(){

  //https://www.youtube.com/watch?v=8aOn0VMgG1w
  //var ss = SpreadsheetApp.getActiveSpreadsheet();

  //var estss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Estimate');
  //commented out to try the var below...
  //same result
  var estss = SpreadsheetApp.getActive().getSheetByName('Estimate');

  //var catss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Categories');
  //commented out to try the var below...
  //same result
  var catss = SpreadsheetApp.getActive().getSheetByName('Categories');

  var activeCell = estss.getActiveCell();

  if(activeCell.getColumn() == 1 && activeCell.getRow() > 1){

    activeCell.offset(0, 1).clearContent().clearDataValidations();

    var cat = catss.getRange(1,2,1,catss.getLastColumn()).getValues();
    var catIndex = cat[0].indexOf(activeCell.getValue()) + 2;

    if(catIndex != 0){

      var validationRange = catss.getRange(2, catIndex,catss.getLastRow());
      var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();

      activeCell.offset(0, 1).setDataValidation(validationRule);

    }
  }
}

При выборе категории в столбце A на вкладке «Оценка» в следующем столбце (B) должна быть установлена ​​проверка данных со всеми подкатегориями (строки ниже соответствующей категории) на вкладке «Категории».Это в основном работает, но это также работает на любой другой вкладке.Я бы хотел, чтобы он работал только на вкладке "Оценка".

1 Ответ

2 голосов
/ 09 мая 2019

Вместо активных методов используйте объект Event

Если ваш объект события e -> function onEdit(e){}
e.range возвращает отредактированный диапазон, тогда вы можете использовать

e.range.getSheet().getName() чтобы получить название активного листа

тогда вы можете использовать оператор if, например

if(e.range.getSheet().getName() !== 'Sheet 1') return;

чтобы остановить выполнение скрипта, когда имя активного листа не равно Sheet 1

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