Мне нужно написать функцию onEdit для скрипта Google Sheets - PullRequest
0 голосов
/ 21 апреля 2020

Это сценарий, который я хочу запустить:

function moveValuesOnly () {


  var ss = SpreadsheetApp.getActiveSpreadsheet ();

  var source = ss.getRange ("Copy!A1:N200");

  var destSheet = ss.getSheetByName("Paste");

  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);

  source.copyTo (destRange, {contentsOnly: true});

}

**// I want moveValuesOnly to trigger once Cell A10 in the Validation tab changes to '2'**

Я был бы очень признателен за любую помощь, так как сейчас я немного зелен.

С уважением,

Брендон

1 Ответ

0 голосов
/ 21 апреля 2020

Я бы предложил прочитать на Простые триггеры и Устанавливаемые триггеры .

По сути, вы можете создать любую функцию и запустить ее, используя класс ScriptApp, и они называются устанавливаемыми триггерами.

Но есть специальные функции, которые не чтобы сработать, вам нужно от go до ScriptApp, вам просто нужно изменить имя функции, и это включит запуск этих функций.

Простой триггер

Просто измените имя функции, чтобы она автоматически начала запуск.

function onEdit(e) {


  var ss = SpreadsheetApp.getActiveSpreadsheet ();

  var source = ss.getRange ("Copy!A1:N200");

  var destSheet = ss.getSheetByName("Paste");

  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);

  source.copyTo (destRange, {contentsOnly: true});

}

Устанавливаемый триггер

Создайте еще одну функцию для выполнения вовремя создать триггер

function moveValuesOnly(e) {


  var ss = SpreadsheetApp.getActiveSpreadsheet ();

  var source = ss.getRange ("Copy!A1:N200");

  var destSheet = ss.getSheetByName("Paste");

  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);

  source.copyTo (destRange, {contentsOnly: true});

}

function createTrigger(){

  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('moveValuesOnly')
      .forSpreadsheet(ss)
      .onEdit()
      .create();

}

Вы указали в своем коде, что хотите запускать, только когда ячейка A10, но на данный момент это невозможно. Вам нужно создать оператор if, чтобы убедиться, что редактируемый диапазон - это то, что вам нужно.

Посмотрите на объекты событий , потому что это будет входной параметр функций триггера (e). Этот объект имеет информацию о редактируемом диапазоне и электронной таблице.

В основном создайте условие с e объектом

function onEdit(e) {
  var range = e.range;
  var newValue = e.value;
  var oldValue = e.oldValue;

  var sheet = range.getSheet();

  if(sheet.getName() == "<Your sheet name>" && newValue == 2 && range.getColumn() == 1 && range.getRow() == 10){
    // Browser.msgBox("Edit entered condition");
    //
    // Do your stuff here when the condition is satisfied 

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