【发布时间】:2023-02-23 20:13:30
【问题描述】:
我有一个谷歌表格,可以在一周内回复,请帮助我使用应用程序脚本如何禁用在每个星期五下午 6 点到星期一上午 9 点无法访问的表格
并且从周一上午 9 点到整周直到周五下午 6 点都可以再次访问。
这应该每周重复一次。
【问题讨论】:
标签: google-apps-script google-forms
我有一个谷歌表格,可以在一周内回复,请帮助我使用应用程序脚本如何禁用在每个星期五下午 6 点到星期一上午 9 点无法访问的表格
并且从周一上午 9 点到整周直到周五下午 6 点都可以再次访问。
这应该每周重复一次。
【问题讨论】:
标签: google-apps-script google-forms
我相信你的目标如下。
在你的情况下,我记得这个线程可能会有用。 Ref (Author: me) 但是,在那种情况下,脚本每天都会运行。我认为根据您的预期情况修改此脚本可能有点复杂。所以,我想介绍修改后的脚本作为答案。当根据您的情况修改该脚本时,下面的示例脚本怎么样?
请将以下脚本复制并粘贴到您的 Google 表单的脚本编辑器中,然后保存脚本。
当您使用脚本编辑器运行init()时,会安装一个时间驱动的触发器。此触发器每天自动运行函数installTimeDrivenTrigger()。但是,在这种情况下,脚本由if (["Saturday", "Sunday"].includes(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "EEEE"))) return; 在周六和周日以外的日子运行。并且,当这个函数运行时,start()和end()函数被安装为时间驱动的触发器。
start() 在 09:00 启用 Google 表单。并且,end() 在 18:00 禁用 Google 表单。并且,在第二天之后,installTimeDrivenTrigger() 函数将自动运行。
const deleteTriggers_ = e => ScriptApp.getScriptTriggers().forEach(t => {
if (e.includes(t.getHandlerFunction())) ScriptApp.deleteTrigger(t);
});
const start = _ => FormApp.getActiveForm().setAcceptingResponses(true);
const end = _ => FormApp.getActiveForm().setAcceptingResponses(false).setCustomClosedFormMessage("Closed.");
function installTimeDrivenTrigger() {
if (["Saturday", "Sunday"].includes(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "EEEE"))) return;
deleteTriggers_(["start", "end"]);
const time1 = new Date();
time1.setHours(9, 0, 0);
const time2 = new Date();
time2.setHours(18, 0, 0);
ScriptApp.newTrigger("start").timeBased().at(time1).create();
ScriptApp.newTrigger("end").timeBased().at(time2).create();
}
// Please run this script. By this, installTimeDrivenTrigger() is run 00:00 - 01:00 every day.
function init() {
deleteTriggers_(["installTimeDrivenTrigger"]);
ScriptApp.newTrigger("installTimeDrivenTrigger").timeBased().everyDays(1).atHour(0).create();
// end(); // If you want to close as the default situation, please use this.
}
【讨论】: