首页 文章

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

提问于
浏览
0

你好有用的脚本,

在我们的寄宿学校,我们目前有一个学生用来登录和退出的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);
}

1 回答

  • 2

    你看过getUserTriggers()deleteTrigger吗?

    • 使用 getUserTriggers() ,您可以识别调用 dailyRecord 的触发器是否已存在 . 它返回一个触发器列表,您可以使用 getHandlerFunction() 检查每个触发器调用的函数 .

    • 使用 deleteTrigger() ,您可以删除给定的触发器 . 例如如果安装了调用 dailyRecord 的触发器(并在 getUserTriggers() 列表中返回,则可以使用此功能将其删除) .

    • 要再次启用触发器,检查它是否已存在,您可以根据已有的代码使用触发器构建器来重新创建触发器 .

    有了这些方法,你应该能够达到你想要的效果 .

相关问题