从Google App脚本自动创建个性化Google表单

时间:2012-07-31 13:22:13

标签: google-apps-script

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

  • 描述“树”
  • 描述一个“山”
  • 描述“河流”

......等等

Google Apps脚本可以实现吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  3. 注意:可能是因为这不符合记录。我无法使用此方法,onOpen()仅用于打开文件FOR EDITING而不是FILLING。 我不想深入讨论这个问题,但它似乎与文档相反,后者指出OPEN-FOR-EDITING限制仅适用于可安装触发器而不适用于简单触发器。

    1. 在每个用户提交表单后,在运行setQuiz()函数的已安装触发器中,触发器设置为ON ON SUBMIT。 每次用户提交回复时,请替换上面#1中的文本。这是有效的,但是,如果下一个用户在功能完成替换表单中的所有文本之前单击,下一个用户可能会在替换之前获得表单的一部分!!
    2. 不是一个好主意。

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

        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... 
      

答案 1 :(得分:0)

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

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