Автоматически копировать строки в другой лист на основе значения ячейки - PullRequest
0 голосов
/ 08 ноября 2019

Я довольно новичок в сценариях, поэтому я прошу прощения за возможные ошибки в объяснении моей проблемы. Я работаю над электронной таблицей, которая будет копировать строку на другой лист, если она соответствует определенным критериям (или определенное значение в столбце), и вторую функцию, которая будет перемещать строку на другой лист при удовлетворении определенных критериев.

Используя связанные вопросы / ответы, я смог написать сценарий, который удаляет строку по критерию соответствия «Исходящие» в столбце 4, см. MyFunction1 ниже. Для myFunction2 я пытаюсь вместо этого просто скопировать строку на другой лист, когда она соответствует критериям «M» в столбце 15, но когда я ввожу это значение в столбец 15, он копирует неверную информацию о строке.

Надеюсь, это имеет смысл! Код ниже:

function onEdit(event) {
  myFunction1(event);
  myFunction2(event);
}
function myFunction1(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Trailers in Yard" && r.getColumn() == 4 && r.getValue() == "Outbound") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Outbound");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}
function myFunction2(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Trailers in Yard" && r.getColumn() == 15 && r.getValue() == "M") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Moves");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);  
  }
}

Благодарим за помощь!

1 Ответ

1 голос
/ 08 ноября 2019

Попробуйте так:

function onEdit(e) {
  //myFunction1(e);
  myFunction2(e);
}
function myFunction2(e){
  //e.source.toast('Flag1');
  var sh=e.range.getSheet();
  if(sh.getName()=="Sheet2" && e.range.columnStart==15 && e.range.getValue()=="M") {
    //e.source.toast('Flag2');
    var targetSheet=e.source.getSheetByName("Sheet1");
    var target=targetSheet.getRange(targetSheet.getLastRow()+1,1);
    sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).copyTo(target);
  }
}

Вам придется изменить названия листов.

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