【问题标题】:Form title from FormResponse来自 FormResponse 的表单标题
【发布时间】:2017-02-10 14:04:41
【问题描述】:

我从电子表格中以编程方式创建了一堆表单,并为每个表单绑定了一个响应触发器。填写表格后,我似乎无法确定填写了哪个表格。

我试过了:

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);
}

我收到以下错误:

执行失败:类型错误:在对象电子表格中找不到函数 getTitle。

【问题讨论】:

标签: google-apps-script google-sheets triggers google-forms


【解决方案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();
}

【讨论】:

    【解决方案2】:

    这个怎么样?

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

    var title = e.source.getTitle()
    

    如果您总是想检索标题,可以使用以下脚本。

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

    【讨论】:

    • 我试过这个,但我得到一个错误:“执行失败:TypeError:在对象电子表格中找不到函数getTitle。”
    • @Yehuda Solomont 很抱歉没有提供帮助。
    • 你很有帮助。你的回答基本正确,问题是google服务的bug。
    • 感谢您的关注。我可以从您的信息中知道错误。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多