【发布时间】:2017-08-16 15:48:33
【问题描述】:
我喜欢 Google 表单,我可以用它们玩几个小时。我花了几天时间试图解决这个问题,寻找答案。这超出了我的想象。我见过类似的问题,但似乎没有一个能帮助我找到答案。我工作的地方有一家咖啡馆,我在 Google 表单上创建了一个预订表格。那是容易的部分。咖啡厅只能在上午 10:30 之前接受预订。我希望表格在每天早上 7 点打开并在上午 10:30 关闭,以在咖啡馆无法处理他们的订单时阻止人们预购。我使用来自http://labnol.org/?p=20707 的非常有用的教程开始我已经添加并搞砸了它,并设法回到下面,这是它目前的样子。它不起作用,我无法理解它。在某一时刻,我设法将其关闭,但我无法将其重新打开!我发现它非常令人沮丧,解决这个问题的任何帮助都会很棒。对我来说这似乎很简单,因为它只需要每天在特定时间打开和关闭。我不知道!请帮帮我?
FORM_OPEN_DATE = "7:00";
FORM_CLOSE_DATE = "10:30";
RESPONSE_COUNT = "";
/* Initialize the form, setup time based triggers */
function Initialize() {
deleteTriggers_();
if ((FORM_OPEN_DATE !== "7:00") &&
((new Date()).getTime("7:00") < parseDate_(FORM_OPEN_DATE).getTime ("7:00"))) {
closeForm("10:30");
ScriptApp.newTrigger("openForm")
.timeBased("7:00")
.at(parseDate_(FORM_OPEN_DATE))
.create(); }
if (FORM_CLOSE_DATE !== "10:30") {
ScriptApp.newTrigger("closeForm")
.timeBased("10:30")
.at(parseDate_(FORM_CLOSE_DATE))
.create(); }
if (RESPONSE_COUNT !== "") {
ScriptApp.newTrigger("checkLimit")
.forForm(FormApp.getActiveForm())
.onFormSubmit()
.create(); } }
/* Delete all existing Script Triggers */
function deleteTriggers_() {
var triggers = ScriptApp.getProjectTriggers();
for (var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
/* Allow Google Form to Accept Responses */
function openForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(true);
informUser_("Your Google Form is now accepting responses");
}
/* Close the Google Form, Stop Accepting Reponses */
function closeForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
deleteTriggers_();
informUser_("Your Google Form is no longer accepting responses");
}
/* If Total # of Form Responses >= Limit, Close Form */
function checkLimit() {
if (FormApp.getActiveForm().getResponses().length >= RESPONSE_COUNT ) {
closeForm();
}
}
/* Parse the Date for creating Time-Based Triggers */
function parseDate_(d) {
return new Date(d.substr(0,4), d.substr(5,2)-1,
d.substr(8,2), d.substr(11,2), d.substr(14,2));
}
【问题讨论】:
-
如果精度很关键,基于时间的触发器是不够的,因为触发器不能保证在指定的确切时间运行。触发器通常在定义的时间后 15 分钟内触发,并且该时间必须按小时间隔,因此 10:30 不是触发器的有效时间。为了获得所需的精度,您需要使用一个外部服务,该服务将在分配的时间触发通知,并让您的应用程序通过将其部署为 Web 应用程序并将其 url 用作 Webhook 来接收这些通知。复杂的东西。
标签: forms time google-apps-script automation google-forms