以编程方式禁用/启用Google脚本触发器

时间:2016-12-05 12:12:47

标签: google-apps-script triggers

Hello有用的脚本,

在我们的寄宿学校,我们目前有一个学生用来登录和退出的Google表格。我创建了一个脚本,每晚复制/粘贴数据列,以创建一个在给定日期登机的记录。

  • 我想在周末休假和假期时禁用该触发器。
  • 我理想地希望这是我已经拥有的功能的一部分 删除以前的表单提交,这意味着用户在每个假期开始时只有一个按钮(删除以前的提交并禁用时间触发)。
  • 如果是,那将是辉煌的 下次学生提交表格时,会重新启用触发器 (表示假期结束了。)

不确定如何使用脚本以这种方式禁用/启用触发器 - 感谢任何建议!

   //Menu allowing user to choose to delete previous form submissions
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      // Or DocumentApp or FormApp.
      ui.createMenu('Clear Out Responses')
      .addItem('Clear Form & Responses', 'showAlert')
          .addToUi();
    }


//Alert box deleting previous form submissions on yes, doing nothing if not
function showAlert() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.alert(
     'This will clear all previously registered data',
     'Are you sure you want to continue?',
      ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
 var ui = SpreadsheetApp.getUi();
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lastRow = source.getLastRow()
  source.deleteRows(2, lastRow)}
  var form, urlForm = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
  if (urlForm) {}
    form = FormApp.openByUrl(urlForm);
    if (form) form.deleteAllResponses();
  }

//Trigger running  record-keeping function each night 
function dailyTrigger() {
  ScriptApp.newTrigger('dailyRecord')
  .timeBased()
  .atHour(22)
  .everyDays(1)
  .create();
}


//Record-keeping function, copy/value-pasting record into next clear column
function dailyRecord() {
    var ss = SpreadsheetApp.getActive()
        .getSheetByName('History'),
        lastColumn = ss.getLastColumn(),
        colE = ss.getRange("C:C")
            .getValues();
    ss.getRange(1, lastColumn + 1, colE.length, 1)
        .setValues(colE);
}

2 个答案:

答案 0 :(得分:2)

您是否看过getUserTriggers()deleteTrigger

  • 使用getUserTriggers(),您可以确定调用dailyRecord的触发器是否已存在。它返回一个触发器列表,您可以使用getHandlerFunction()检查每个触发器调用的函数。
  • 使用deleteTrigger(),您可以删除给定的触发器。例如如果您安装了调用dailyRecord的触发器(并在getUserTriggers()列表中返回),则可以使用此功能将其删除。
  • 要再次启用触发器,检查它是否已经存在,您可以根据您已有的代码使用触发器构建器来重新创建触发器。

使用这些方法,你应该能够达到你想要的效果。

答案 1 :(得分:1)

无法检索现有触发器并重新定义它。例如,无法检索已经运行的基于时间的触发器,并且无法使用代码为其指定新的运行时间。