来自FormResponse

时间:2017-02-10 14:04:42

标签: google-apps-script

我已经从电子表格以编程方式创建了一堆表单,并将响应触发器绑定到每个表单。当填写表格时,我似乎无法弄清楚哪个表格已经完成。

我试过了:

Event.source.getId() 

但是返回电子表格的ID。我想得到表格的标题。

修改:澄清

这是我设置触发器的方式:

ScriptApp.newTrigger('responseTrigger').forForm(form)
 .onFormSubmit()
 .create();

当我试图获得标题时:

function responseTrigger(e) {
  var source = e.source;
  var title = e.source.getTitle().
  Logger.log(title);
}

我收到以下错误:

  

执行失败:TypeError:无法在对象电子表格中找到函数getTitle。

2 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。

有一个知道Google Scripts issue导致了我的问题。您希望e.source.getID()能够为您提供表单的ID,但它会为您提供电子表格的ID。我找到了solution in this question。您所做的是找到触发器的唯一ID,并将其与所有项目触发器交叉引用,如下所示:

    function getFileByTriggerId(triggerId){
      var triggers = ScriptApp.getProjectTriggers();
      for(var i =0; i<triggers.length; i++){
       if(triggers[i].getUniqueId() == triggerId){
        return triggers[i].getTriggerSourceId();
    }
  }
}

然后在您的回复触发器中写下:

function responseTrigger(e) {
  var realEvent = getFileByTriggerId(e.triggerUid);
  var form = FormApp.openById(realEvent);
  var title = form.getTitle();
}

答案 1 :(得分:0)

这个怎么样?

如果要在提交表单时检索标题,可以使用以下脚本。

var title = e.source.getTitle()

如果您始终想要检索标题,可以使用以下脚本。

var form = FormApp.openById( form ID );
var title = form.getTitle();