通过脚本

时间:2015-11-05 18:47:26

标签: google-apps-script google-form

我想使用脚本来更改现有Google表单的行为,以便在完成第1页后,未来的受访者将转到另一个页面(例如,第3页)。

我知道这涉及使用.setGoToPage(),但我不知道如何设置参数来进行此修改。

考虑到表单中的页面已经创建,所以我只需要指出第1页应该转到第3页。为了澄清,我的问题是我需要找到"第1页和第34页;没有它的名字,所以,之后,我可以应用" .setGoToPage(pageThree);"命令到第3页(其名称也未知)。

这里的真正目标实际上是将页面1设置为回归自身,以便没有人能够看到第二页的选项,从根本上阻止了表单的使用。我只是这样说,以后能够撤消它。它必须是一个脚本,因为它将被添加到另一个执行其他操作的脚本中。我不能进入表格并手动完成。

 function myFunction() {
 var form = FormApp.openById("ID GOES HERE");
 var item = form.getItems(itemType);
 // here is where I need the rest of the script 

 .setGoToPage("PAGE THREE GOES HERE");
}    

3 个答案:

答案 0 :(得分:1)

好消息,坏消息。首先是好消息。

你走在正确的轨道上;您可以通过Form.getItems(FormApp.ItemType.PAGE_BREAK)获取所有分页符项,这将生成一个有序的节数组。 “第一页”(第1部分)以分页符#0结束,第二页以分页符#1结束,依此类推。

因此,修改表格以便在第1部分之后转到第3部分很简单:

function myFunction() {
  var formId = '--form-id--';

  var form = FormApp.openById(formId);
  var pageBreaks = form.getItems(FormApp.ItemType.PAGE_BREAK);
  pageBreaks[0].asPageBreakItem().setGoToPage(pageBreaks[1].asPageBreakItem());
}

不要忘记.asPageBreakItem()来电,因为.getItems()的结果是通用的Item,但您需要专门使用PageBreakItem才能使用.setGoToPage()

现在坏消息...章节结束并带有分页符,因此没有设置为第一部分的目的地。

但是,由于您希望有效地禁用表单,因此您可以停止接受响应。

function myFunction() {
  var formId = '--form-id--';

  var form = FormApp.openById(formId);
  form.setAcceptingResponses(false);
}

答案 1 :(得分:1)

优秀的Mogsdad。我无法使用您提供的第二个选项,因为目标是确保用户无法看到表单的其余部分,因为表单本质上是一个考试,所以只是关闭响应是不够的。

但是,你间接地解决了这个问题,因为我所做的是在第一页和第二页之间添加了一个空的额外页面(使第二页真的是第三页)并使用了你的脚本但略微修改了它已经实现了我的目标。

function myFunction() {
 var form = FormApp.openById('FORM ID HERE');
 var pageBreaks = form.getItems(FormApp.ItemType.PAGE_BREAK);
 pageBreaks[0].asPageBreakItem().setGoToPage(pageBreaks[0].asPageBreakItem());
 pageBreaks[1].asPageBreakItem().setGoToPage(pageBreaks[0].asPageBreakItem());
}

答案 2 :(得分:0)

获取第2页并将setGoToPage设置为FormApp.PageNavigationType.RESTART。

第2页的pageNavigationType是第1页完成后无需选择重定向您的选项的位置。要转到第1页,请使用FormApp.PageNavigationType.RESTART。要转到任何其他页面,请将该页面用作pageBreakItem。

我意识到这个话题已经有将近三年的历史了,但是,有了一个更好的答案,我想我会为偶然发现该话题的任何人提供答复。