Триггер onEdit только для указанного диапазона ячеек - PullRequest
0 голосов
/ 13 февраля 2020

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




  var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet

  var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking

  var sourceSheet = ss.getSheetByName("Report Template");//source sheet

  var targetSheet = ts.getSheetByName("Tracker");//target sheet

  var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet



  var valuesLength = values.length;

  if (!valuesLength) return;



  var lastRow = targetSheet.getLastRow();

  var requiredRows = lastRow + valuesLength - targetSheet.getMaxRows();

  if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows);



  values[0].push(new Date()); //Add Date to the 2D array.

  targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);





}```

1 Ответ

0 голосов
/ 14 февраля 2020
  • Вам необходим оператор if, который оценивает, какие ячейки редактируются
  • Чтобы получить доступ к отредактированной ячейке, вы можете использовать объект события range, который возвращает ячейка, которая была отредактирована

Пример:

function onEdit(event){
var cellName = event.range.getA1Notation();
  if(cellName == "A1" || cellName == "A2"){
    var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
    ...
  }
}

ОБНОВЛЕНИЕ:

У вас также есть некоторые другие незначительные ошибки, такие как, например, определение requiredRows.

Ваш полный код будет выглядеть примерно так, при этом вы должны заменить ячейки A1 и A2 через те ячейки, которые вы на самом деле хотели бы посмотреть:

function onEdit(event){
  var cellName = event.range.getA1Notation();
  if(cellName == "A1" || cellName == "A2"){
    var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
    var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
    var sourceSheet = ss.getSheetByName("Report Template");//source sheet
    var targetSheet = ts.getSheetByName("Tracker");//target sheet
    var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
    var valuesLength = values.length;    
    if (!valuesLength) return;
    var lastRow = targetSheet.getLastRow();
    var requiredRows = valuesLength;
    values[0].push(new Date()); //Add Date to the 2D array.
    targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
  }
}

ВАЖНО :

Чтобы использовать службы, требующие авторизации, такие как SpreadsheetApp.openByUrl(), вам необходимо заменить простой onEdit триггер на устанавливаемый один.

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