簡體   English   中英

以編程方式禁用/啟用 Google Apps 腳本腳本觸發器

[英]programmatically disable / enable Google Apps Script script trigger

我創建了一個腳本作為基於時間的觸發器運行。

  • 我想在周末和節假日禁用該觸發器。
  • 理想情況下,我希望這成為我已經擁有的刪除以前表單提交的功能的一部分,這意味着用戶在每個假期開始時只有一個按鈕可以按下(刪除以前的提交並禁用時間觸發器)。
  • 如果下次學生提交表格(表示假期結束)時重新啟用觸發器,那就太好了。

不確定如何使用腳本以這種方式禁用/啟用觸發器 - 感謝您的任何建議!

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

你看過getUserTriggers()deleteTrigger嗎?

  • 使用getUserTriggers()您可以確定調用dailyRecord的觸發器是否已經存在。 它返回一個觸發器列表,您可以使用getHandlerFunction()檢查每個觸發器調用的函數。
  • 使用deleteTrigger()您可以刪除給定的觸發器。 例如,如果安裝了用於調用dailyRecord的觸發器(並從getUserTriggers()返回到列表中,則您可以使用此函數將其刪除。
  • 要再次啟用觸發器,在檢查它不存在后,您可以根據您已有的代碼使用觸發器構建器來重新創建觸發器。

有了這些方法,你應該可以達到你想要的效果。

無法檢索現有觸發器並重新定義。 例如,已經運行的基於時間的觸發器無法檢索並使用代碼獲得新的運行時間。

暫無
暫無

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

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