如何在Google表格中合并多个onEdit / Trigger脚本?

问题描述 投票:0回答:1

请原谅我,如果我的措辞不对,我是Scripts的新手,但是有人给我一个脚本,可以在我拥有的图纸上运行onEdit / Triggers。我还有一个日期/时间戳的onEdit脚本。昨天我让它们全部工作了很短,但是随后新的onEdit触发脚本开始失败。说我有太多的脚本。在触发器上导入的范围具有公式和条件格式。触发阶段1,阶段2,阶段3和PIT代码的事件的单元是数据验证单元。工作表链接和代码在此帖子的底部。

所以我想知道的是:

  1. 如何将四个(4)脚本合并为一个(1)脚本,
  2. 如果可以在脚本中添加代码以删除它导入的范围单元,然后再放置新的触发单元。因为它导入的每个范围都有条件格式,所以在触发新范围之后仍然存在。

Sheet链接: 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();
}

第二阶段代码:

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();
}
google-apps-script google-sheets eventtrigger
1个回答
0
投票
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.