Ограничить getRange указанным c Sheet не работает с функцией onEdit - PullRequest
0 голосов
/ 30 апреля 2020

Когда я на листе Novo Item: у меня есть этот скрипт, и его цель - сгенерировать уникальный идентификатор после изменения ячейки W4 на листе Novo Item. Он перебирает список идентификаторов на другом листе (ArquivoItens) и добавляет к нему 1, если там еще нет идентификатора.

Я также установил сообщение с предупреждением, если пользователь пишет продукт name name, которое уже существует в ArquivoItens.

Когда я на листе EditarItem и когда я изменяю значение ячейки W4, появляется всплывающее сообщение, даже если я указал имя листа, это всплывающее окно.

function setItemID() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("ArquivoItens");
  var NovoItemSheet = ss.getSheetByName('Novo Item');

  var drang = sheet.getRange(1, 1, sheet.getLastRow(), 2);
  var ids = drang.getValues();
  var biggest = 0;

 //iterates through the list of ID's
  for(var i = 0; i < ids.length; i++){
    var id = ids[i][0];
    if(id > biggest){
      biggest = id;
    }
  }
  //although it is specified above that this is on Novo Item sheet, the pop up below keeps going off when I'm on EditarItem
  var selectedCell = NovoItemSheet.getRange("W4");

  for (var j = 1; j < ids.length; j++) {
    var itemName = ids[j][1];
    if (selectedCell.getValue() == itemName){
      Browser.msgBox('Já existe um item com este nome!')
      return;
    }
  }

Любая помощь в том, почему это происходит, приветствуется.

Приветствия, Антонио

1 Ответ

1 голос
/ 30 апреля 2020

Когда вы редактируете любую ячейку на любом листе, вы запускаете onEdit и запускаете функцию

  • Если условие selectedCell.getValue() == itemName выполнено - вы получите предупреждение, нет Неважно, либо вы только что создали повторяющееся имя продукта, либо оно уже существовало ранее.

  • Чтобы решить эту проблему, вам нужно указать, какой тип редактирования должен вызывать функцию.

  • Это то, что вы можете сделать, например, проверив, какой лист (и, если необходимо, также какой диапазон) был отредактирован.

Образец:

function setItemID() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheetName = ss.getActiveSheet().getName();
  if(activeSheetName == 'Novo Item'){
    // carry out the rest of the function
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...