你好有用的脚本,
在我们的寄宿学校,我们目前有一个学生用来登录和退出的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 回答
你看过getUserTriggers()和deleteTrigger吗?
使用
getUserTriggers()
,您可以识别调用dailyRecord
的触发器是否已存在 . 它返回一个触发器列表,您可以使用getHandlerFunction()
检查每个触发器调用的函数 .使用
deleteTrigger()
,您可以删除给定的触发器 . 例如如果安装了调用dailyRecord
的触发器(并在getUserTriggers()
列表中返回,则可以使用此功能将其删除) .要再次启用触发器,检查它是否已存在,您可以根据已有的代码使用触发器构建器来重新创建触发器 .
有了这些方法,你应该能够达到你想要的效果 .