3

我想使用 Google Apps 脚本创建个性化表单,但在文档中找不到方法。例如,对于不同的用户,问题将是:

  • 形容一棵“树”
  • 形容一座“山”
  • 形容一条“河”

... 等等

这可以通过 Google Apps 脚本实现吗?

4

2 回答 2

1

现在是 2014 年,是的,您可以制作动态表格:

您可以在三个地方更改表单。

  1. 您可以预先创建几个标准表单,并为每个不同的用户或用户组提供不同的表单:首先制作第一个表单。然后制作一个脚本,将此表单邮寄给您想要的用户,然后遍历所有项目并替换文本。(请参阅本文底部的代码)

  2. 您可以创建一个标准表单,然后每次在提供表单之前替换某些文本。这可以通过onOpen()触发器来完成。

注意:这可能不像记录的那样工作。我无法使用此方法,并且 onOpen() 仅用于打开文档以进行编辑而不是用于填充。我不想深入探讨,但这似乎与文档相反,文档指出 OPEN-FOR-EDITING 限制仅适用于可安装触发器,而不适用于简单触发器。

  1. 在每个用户提交表单后,在运行 setQuiz() 函数的已安装触发器中,触发器设置为在提交时动作。每次用户提交响应时,替换上面#1 中的文本。这可行,但是,如果下一个用户在功能完成替换表单中的所有文本之前单击,下一个用户可能会在替换之前获得表单的部分内容!

不是一个很好的主意。

这是第一个解决方案(和第三个)的代码

  function setQuiz(keyword, replacement){
    var keyword = ...
    var replacement = ...
    var form = FormApp.getActiveForm();
    var items = form.getItems();
    var txt;
    for (i=0; i<items.length; i++){
        txt = items[i].getTitle();
        txt = txt.replace(replacement, keyword);
        items[i].setTitle(txt);
        txt = "";
        txt = items[i].getHelpText();
        txt = txt.replace(replacement, keyword);
        items[i].setHelpText(txt);
     }
     return form;
     // CREATE A COPY of the form
     // and send email with link to the form's COPY in next method, which will be done, only after this method replaced all texts. (see issue with solution 3)
     // note you'll have to iterate between the replacement texts each time. So if you start out with tree to mountain, you must remember to change mountain to river... 
于 2014-02-02T18:24:45.910 回答
0

简短的答案在评论中。稍微详细一点的答案是

  1. 创建电子表格。在那里填充一对列,如下所示
user1@email.com      tree
user2@email.com      mountain
user3@email.com      river
  1. 在您的脚本中:打开电子表格,将包含填充列的范围读取到数组中。此处此处的文档
  2. 在您的脚本中:使用Session.getActiveUser().getEmail()函数获取用户电子邮件,在数组中找到电子邮件。
  3. 在您的脚本中:创建带有标签的表单。标签文本应该类似于label.setText('Describe a "' + usersWord + '"');
于 2012-07-31T13:55:22.030 回答