0

我有一个现有的 Google 表单,其中有一个 TextItem,标题为“这是在哪个位置执行的?”。

在此处输入图像描述

每当加载(打开)表单时,我都需要为这个现有的文本框设置一个位置值(loc)并将其显示给用户。

function populateMemberIds(loc){
    var form = FormApp.openById(formUrl);
    var questions = form.getItems();
    for (var i=0; i<questions.length; i++){
       if(questions[i].getTitle()=="Which location was this performed at?"){
       var textItem = questions[i].asTextItem();
       //I get stuck here
    }

}

我已经设置了 openForm 触发器,它允许在每个表单加载时运行 populateMemberIds 函数。同样,我需要用位置值 (loc) 更改文本项的“您的答案”部分的值。

我将不胜感激任何帮助。

4

2 回答 2

1

您不能修改用户填写的表单响应,您可以通过编程方式创建表单响应或在提交后编辑响应。当有人打开表单来编辑它而不是回答它时,onOpen 表单触发器就会运行 [1]:

此事件不会在用户打开表单进行响应时发生,而是在编辑器打开表单进行修改时发生。

此外,触发器函数带有一个已经定义的事件参数 [1],因此您不能像使用参数一样设置自己的函数loc参数。

编辑

您可以以编程方式创建并提交表单响应 [2],您还可以从中获取带有预填表单的 URL,供用户完成 [3]。

function populateMemberIds(loc){
  var form = FormApp.openById("[FORM-ID]");
  var questions = form.getItems();
  var response = form.createResponse(); 

  for (var i=0; i<questions.length; i++){
    if(questions[i].getTitle()=="title form"){//Which location was this performed at?"){
      var textItem = questions[i].asTextItem();
      var itemResponse = textItem.createResponse(loc) ;
      response.withItemResponse(itemResponse);
    }
  }
  //Submit programmatically the form response
  response.submit();
  //URL with prefilled form response
  Logger.log(response.toPrefilledUrl()); 
}

function test () {
  populateMemberIds("US");
}

[1] https://developers.google.com/apps-script/guides/triggers/events#google_forms_events

[2] https://developers.google.com/apps-script/reference/forms/form-response

[3] https://developers.google.com/apps-script/reference/forms/form-response#toprefilledurl

于 2019-12-10T16:53:11.250 回答
1

Google 表单的 onOpen Google Apps 脚本触发器(简单且可安装)仅在表单编辑器中打开表单时执行,而不是在使用查看/编辑响应链接打开表单时执行。

有两种方法可以“预填充” Google 表单响应:

  1. 使用预填充的响应 URL
  2. 以编程方式创建响应,然后使用editResponseUrl

有关的

于 2019-12-10T17:13:00.690 回答