Скопировать строку данных на основе двух условий на лист, который открывается по идентификатору или URL

У меня есть код, который помогает мне копировать строку данных на основе условия в данном столбце. У меня есть лист под названием "Мастер", который содержит около 1000 строк данных. Я хочу переместить строку данных на лист под названием "Основные ответы", если в столбце 1 "Мастер" есть слово "Положительный" или "Отрицательный". Я использовал функцию или (||) в ЗАЯВЛЕНИИ ЕСЛИ, чтобы выбрать условие (то есть, если введен "Положительный" или "Отрицательный"), но строка копируется только при вводе "Положительного" в первом столбце. Когда я набираю "Отрицательный" в первом столбце, строка не копируется. Кроме того, я хотел знать, как код должен быть изменен, если бы мне пришлось вызывать лист "Основные ответы", используя ".openByID или.openByURL". Я приложил код, пожалуйста, не стесняйтесь редактировать его. Я новичок в написании сценариев и застрял на этом более месяца. Любая помощь будет оценена. Заранее спасибо.

function onEdit()
{
  var sheetNamesToWatch = ["Master"];
  var columnNumberToWatch = 1;
  var valuesToWatch = ["Positive"];
  var valuesToWatch1 = ["Negative"];
  var targetSheetsToMoveTheRowTo = ["Master Responses"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if(sheetNamesToWatch.indexOf(sheet.getName()) != -1 && 
  valuesToWatch.indexOf(range.getValue()) != -1 || 
  valuesToWatch1.indexOf(range.getValue()) != -1 && range.getColumn() 
  ==columnNumberToWatch)
  {
    var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch.indexOf(range.getValue())]);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, 
    sheet.getLastColumn()).copyTo(targetRange);
  }
}

1 ответ

Я не уверен насчет.openByID или.openByURL, однако это должно решить проблему с "Отрицательным".

Я также добавил дополнительные скобки в первом операторе if, чтобы мне было ясно, что он проверяет.

function onEdit()
{
  var sheetNamesToWatch = ["Master"];
  var columnNumberToWatch = 1;
  var valuesToWatch = ["Positive"];
  var valuesToWatch1 = ["Negative"];
  var targetSheetsToMoveTheRowTo = ["Master Responses"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if((sheetNamesToWatch.indexOf(sheet.getName()) != -1) && ((valuesToWatch.indexOf(range.getValue()) != -1) || 
  (valuesToWatch1.indexOf(range.getValue()) != -1)) && (range.getColumn() ==columnNumberToWatch))
  {
    if (valuesToWatch.indexOf(range.getValue()) != -1)
    {
      var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch.indexOf(range.getValue())]);
    }
    else
    {
      var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch1.indexOf(range.getValue())]);
    }


    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, 
    sheet.getLastColumn()).copyTo(targetRange);
  }
}
Другие вопросы по тегам