Как объединить несколько сценариев onEdit / Trigger в листе Google? - PullRequest
0 голосов
/ 21 февраля 2020

Простите, если моя формулировка выключена, я новичок в Scripts, но кто-то сделал мне скрипт для запуска onEdit / Triggers для листа, который у меня есть. У меня также есть скрипт onEdit для даты / времени. Вчера у меня все они работали ненадолго, но затем новые сценарии запуска onEdit перестали работать; заявив, что у меня было слишком много сценариев. Диапазоны, которые импортируются по триггерам, имеют формулы и условное форматирование. Ячейка, которая инициирует события для кодов Стадии 1, Стадии 2, Стадии 3 и PIT, является ячейкой проверки данных. Ссылка на лист и коды находятся внизу этого поста.

Вот что мне интересно:

  1. Как объединить четыре (4) сценария в один (1) сценарий и
  2. Если возможно добавить код в скрипт, чтобы удалить ячейки диапазона, которые он импортирует, прежде чем он поместит новые сработавшие ячейки. Поскольку каждый импортируемый диапазон имеет условное форматирование, которое сохраняется после запуска нового диапазона.

Ссылка на лист: https://docs.google.com/spreadsheets/d/1KYSiVggIm7KIKxpJMnUhldrzsIaETCqyjOWJ1a9k1cI/edit?usp=sharing

Код даты / времени:

function onEdit(e) {
  const sheetNameFellowshipTracking = 'Fellowship Tracking';
  const dateCol = 43;

  // Get edited sheet.
  const range = e.range;
  const sheet = range.getSheet();

  if (sheet.getName() === sheetNameFellowshipTracking)
  {
    // Get edited row.
    const row = range.getRow();

    if (row >= 4 && row <= 28)
    {
      // Get current time.
      const time = Utilities.formatDate(new Date(), "GMT-05:00", "MM/dd, HH:mm");

      // Set edited datetime.
      const dateModifiedRange = sheet.getRange(row, dateCol);
      dateModifiedRange.setValue(time);
    }
  }
}

Код этапа 1:

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Fellowship Tracking')return;
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 1') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('B3:G21');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}

Код этапа 2:

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Fellowship Tracking')return;
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 2') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('H3:M21');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}

Этап 3 Код:

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Fellowship Tracking')return;
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 3') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('N3:S21');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}

Код PIT:

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Fellowship Tracking')return;
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='PIT') {
    var srcrg=e.source.getSheetByName('PIT Sheet').getRange('B5:F17');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}

1 Ответ

0 голосов
/ 22 февраля 2020
function onMyEdit(e) { 
  const sh=range.getSheet();
  if(sheet.getName()=="Fellowship Tracking" && e.range.rowStart>=4 && e.range.rowStart<=28) {
     const time=Utilities.formatDate(new Date(), "GMT-05:00", "MM/dd, HH:mm");
     sh.getRange(e.range.rowStart,43).setValue(time);
  }
  if(sh.getName()=='Fellowship Tracking' && e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 1') {
    const srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('B3:G21');
    const desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
  if(sh.getName()=='Fellowship Tracking' && e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 2') {
    const srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('H3:M21');
    const desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
  if(sh.getName()=='Fellowship Tracking' &&  e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 3') {
    const srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('N3:S21');
    const desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
  if(sh.getName()=='Fellowship Tracking' && e.range.columnStart==7 && e.range.rowStart==31 && e.value=='PIT') {
    const srcrg=e.source.getSheetByName('PIT Sheet').getRange('B5:F17');
    const desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

Более сложная функция создания триггера.

   function createTrigger() {
  //guarantees that you dont create a trigger for a function if there already is one.
  if(!isTrigger('onMyEdit')) {
    ScriptApp.newTrigger('onMyEdit').forSpreadsheet(SpreadsheetApp.getActive().getId()).onEdit().create();
  }
}

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}
...