Вызов функции onEdit для значения ячейки, если значение равно конкретному тексту - PullRequest
1 голос
/ 15 октября 2019

У меня есть функция с именем copy (), которая может копировать диапазон с листа и вставлять на другой лист. Эту функцию необходимо выполнить из редактора сценариев, но я хочу сделать это автоматически, если я изменю значение ячейки Sheet3! A3.

С помощью следующего кода я могу отправить дату / время определенной ячейке. Я хочу что-то вроде этого, который просто вызовет функцию copy (), если значение A3 для Sheet3 будет изменено.

function onEdit(event) {
  var range = event.range;
  //var cofCellEdited = range.getActivelumnOSheet();
  var cofCellEdited = range.getSheet().getSheetName();
  if (cofCellEdited === "Sale") {

    var timezone = "GMT+06:00"
    var timestamp_format = "M/d/yyyy HH:mm:ss"; // Timestamp Format. 
    var updateColName = "Product";
    var timeStampColName = "Time";
    var sheet = event.source.getSheetByName('Sale'); //Name of the sheet where you want to run this script.
    var actRng = event.source.getActiveRange();
    var editColumn = actRng.getColumn();
    var index = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf(timeStampColName);
    var updateCol = headers[0].indexOf(updateColName);
    updateCol = updateCol + 1;
    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
      var cell = sheet.getRange(index, dateCol + 1);
      var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
      cell.setValue(date);
    }
  }

И моя функция копирования:

function copy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("1I9KYJUtT2Vi0yAi_b8LaBSijReL-XEoKKZUqTxeWmQQ");
  var source_sheet = ss.getSheetByName("Suposed Share");
  var target_sheet = target.getSheetByName("Payable");
  var source_range = source_sheet.getRange("A2:D3");
  var last_row = target_sheet.getLastRow();
  target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange("A" + (last_row + 1) + ":D" + (last_row + 1));
  source_range.copyTo(target_range, {
    contentsOnly: true
  });


}

Как я могу вызвать эту функцию, если я изменю значение Sheet3! A3?

1 Ответ

1 голос
/ 15 октября 2019

Вы можете выполнить ваш запрос, используя устанавливаемые триггеры со следующей формулой в вашем коде:

function onEdit(e) {
  if (e.range.getA1Notation() == 'A3' && e.source.getSheetName() == 'Sheet3') {
    copy();
  }
}

Эта формула будет использовать объект события для вызоваcopy() формула каждый раз, когда вызывается ячейка A3 листа Sheet3. Вам не нужно onEdit(event) (из вашего вопроса) в вашем коде, чтобы сделать эту работу. Пожалуйста, обратитесь за помощью, если вам нужны дальнейшие разъяснения.

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