【发布时间】:2020-07-26 09:31:19
【问题描述】:
以下脚本创建一个表单,该表单仅接受仅存储在 google 表格(A1 到 A250)中的密码。
有没有一种方法可以使表单使用存储在 google 表格中的相同密码不接受多个响应。例如,如果我从两个不同的电子邮件 ID 填写表格,那么它不应该接受两次。输入密码后,其他人将无法再次使用它。
function validatePassword() {
// Create new custom form
var form = FormApp.create('new');
var ss = SpreadsheetApp.openById('');
var passwords = ss.getSheetByName('xyz').getRange('A1:A250').getValues();
// Ex passwords: asd, 123, asd123
const conditions = passwords.map(element => `${element}`).join('|')
// Create first question to check the password, it must be required so that the user does not have access to the rest
// of the form if failed to log in
var item = form.addTextItem().setRequired(true);
//item.setTitle('TEST TITLE');
// Create valid ation for this question matching the password that we got from the sheet
var textValidation = FormApp.createTextValidation()
.setHelpText('You must enter the right ID code')
.requireTextMatchesPattern(conditions)
.build();
item.setValidation(textValidation);
}
【问题讨论】:
-
Google 表单具有将用户限制为只能回复一次的内置功能,但它要求用户使用 Google 帐户登录。该设置位于常规设置下。如果用户输入密码作为表单上问题的答案,那么您想要做的事情是可能的,但需要注意的是他们可以无限次提交表单,但它永远不会被保存再次在工作表中。您需要存储有关密码以及表单是否已提交的数据。
-
我们能否检查在响应表中输入的密码与用户尝试输入的密码。如果有匹配,那么它不应该允许用户这样做。
-
有很多可能性。我你想要的是谷歌表单来防止表单被提交,那么只有一种方法可以做到这一点,那就是通过表单设置,并且用户必须登录。如果工作表链接到表单通过内置功能,您无法停止将数据保存到工作表中。您可能想要的是在工作表中使用 On Form Submit 触发器,并首先从事件对象中获取答案。
-
谢谢艾伦。你有这个语法吗?
-
您需要特定于您的情况的 JavaScript 代码。您需要做的第一件事是了解表格的表单提交触发器。阅读文档:Events - Sheets - Form Submit 您需要获取这些值。但在这个过程中还有许多其他步骤。首先设置 On Submit 触发器并获取值。
标签: javascript google-apps-script google-sheets unique google-forms