簡體   English   中英

如何在 Google Sheet 中組合多個 onEdit/Trigger 腳本?

[英]How can I combine multiple onEdit/Trigger Scripts in a Google Sheet?

如果我的措辭不正確,請原諒我,我是腳本的新手,但有人為我制作了一個腳本來運行我擁有的工作表的 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);
    }
  }
}

第一階段代碼:

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();
}

坑代碼:

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();
}
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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM