【问题标题】:Google Form, make answer field readonly谷歌表单,将答案字段设为只读
【发布时间】:2016-03-25 16:06:46
【问题描述】:

我想将 Google 表单中的一个答案字段设为只读或隐藏,以便表单收件人无法修改/查看它。

这可能吗?

这里是上下文

所以基本上我的最终目标是利用Google Forms 功能向收件人发送调查并在response spreadsheet 中跟踪他们的答案。

到目前为止一切都很好......

现在让我向您介绍强加给我的两个约束:

  1. 发送给收件人的表格需要预先填写一些有关收件人的信息。

  2. 提供给每个收件人以访问表单的 URL 用于提交和稍后更新表单上提供的答案。

看到第二个约束很棘手...通常要做的事情是生成一个pre-filled Url 将其发送给收件人,一旦他们回答了表单,您就可以有一个确认页面,您可以在其中向他们提供@987654324 @ 他们可以用来更新他们的答案(最后更新的答案已经预先填写)。

就我而言,我无法为他们提供第二个网址(编辑网址)。这是一次性的事情:我为每个收件人提供一个 url,他们必须能够使用相同的 url 来回答和更新问题——如果他们需要,可以在以后更新。

Google 不支持此功能,因此我必须编写一个从电子表格中读取的脚本,使用每行中的数据预先填写指定的表格,提交每个表格,然后为每个收件人生成一个编辑网址然后我插入电子表格的“编辑网址”列。我现在可以将网址提供给收件人,他们将能够一遍又一遍地使用该网址来更新他们在调查中的答案。

现在回到隐藏/只读字段。在我的电子表格中,每个收件人都有一个唯一的字母数字值。我希望将其传递给表单,以便当他们回答时(答案记录在响应电子表格中),我将能够通过这个唯一的“id”识别每个收件人。

我在这里写了很多,但我知道为人们提供背景信息很重要,这样我们才能以一种精确而周到的方式互相帮助。

【问题讨论】:

标签: google-apps-script google-forms


【解决方案1】:

如何防止用户看到表单的某些部分。

首先,您创建一个必填问题。除非问题得到回答,否则必填问题会阻止用户转到下一页。

设置问题,使问题的答案只允许用户进入提交页面。

所以,您至少有 3 页:

  • 输入第一页
  • 将被隐藏的中间页面
  • 最后一页是提交页面。

您可以对其进行设置,使用户无法访问该中间页面。您创建一个只有一个选项的必填问题,以转到提交页面。

您可以预先填写所需的问题,并设置一个标题,“仅用于管理目的”或告诉他们继续前进的内容。

他们会点击“继续”按钮,它会跳过带有“隐藏”输入的页面,直接进入提交页面。

如果他们没有点击“继续”按钮,而是回答了问题,那么它也会进入提交页面,因为问题设置为进入提交页面。无论哪种方式,它都会进入提交页面。

【讨论】:

  • 如何设置问题直接进入subimt页面?
  • 我有 2 个部分。第一个包含真正的问题。第二个是“仅用于管理目的”。第一部分完成后,用户被引导到提交页面。我试图通过预填链接在第二部分中预填问题。当我分享链接时,用户来了,填写了第一部分,然后被定向到提交页面。然而,尽管用户通过预填链接打开表单,但第二部分的答案是空的。 @桑迪好
  • @aod 我在这种情况下使用了两个表单。一份给用户,一份给管理员。管理表单中的数据将是权威来源。使用第一个表单中的数据预填充管理表单。确保将任何更改通知用户。
  • -1 这个建议是行不通的。如果用户从未访问过隐藏页面,则不会记录这些页面上包含的任何问题的答案。
  • @John 同意。没用(跳过的部分是空的)。
【解决方案2】:

更新:Google 限制每个脚本有 20 个触发器。这意味着此解决方案仅适用于您生成 20 个或更少的表单响应的情况。

终于想通了。

首先,创建一个具有多项选择选项的表单。此代码假定它是表单中的第一项。

var readonlyValue = 'some unique ID';
var form = FormApp.openById('get the ID from the form in edit mode');
var formResponse = form.createResponse();
items = form.getItems();
var readonlyId = items[0].getId();
var readonlyItem = form.getItemById(readonlyId);
readOnlyItem.asMultipleChoiceItem().setChoiceValues([readonlyValue]); 
formResponse.withItemResponse(readonlyItem.asMultipleChoiceItem().createResponse(readonlyValue));      
formUrl = formResponse.submit().toPrefilledUrl();
//formUrl, now has a link to the form with your unique value: pre-filled and pre-selected

【讨论】:

    【解决方案3】:

    表单可以包含的唯一不用于收集数据的项目是:

    所有其他项目均用于输入,不能设为“只读”。

    【讨论】:

    • 我尝试在我的问题中提供更多上下文。感谢您的回答,这些都是有启发性的资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多