将e.values与onFormSubmit一起使用

时间:2014-08-01 09:39:03

标签: google-apps-script

我是新手,所以请原谅我这是一个愚蠢的问题。

我正在使用谷歌脚本根据谷歌表格中提交的答案进行更改。 我有一个测试功能,我一直在脚本编辑器中使用它,它完美地工作。 但是,当使用onFormSubmit触发器时,从e.values获取变量结果时,它没有做任何事情。我已经定义了项目的触发器,并且可以在“当前项目的触发器”窗口中看到它已经确认,所以它不能是那样。

这是测试功能代码:

function Test_form_submit() {
   var ss = SpreadsheetApp.getActiveSpreadsheet()
   var sheet = ss.getSheetByName("Group Totals")
   SpreadsheetApp.flush()
   var their_choice1 = "Group 5: Thursday 6-8pm"
   var r = find_limits("C3:E7", their_choice1)
   var count = r[0]
   var limit = r[1] 
   check_availability("545507554", count, limit, their_choice1)

}

这是我的触发功能代码:

function onFormSubmit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName("Group Totals")
  SpreadsheetApp.flush()
  var their_choice1 = e.values[3]
  var r = find_limits("C3:E7", their_choice1)
  var count = r[0]
  var limit = r[1] 
  check_availability("545507554", count, limit, their_choice1)

}

我想要的选择是在电子表格的D栏中,所以我相信e.values [3]是正确的选择。 我无法理解为什么没有发生任何事情。

我尝试添加一行logger.log(e.values [3]),但是当我查看时,日志是空白的。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用e.namedValues获取任何特定列的提交值。

e.namedValues["FULL COLUMN NAME"].toString();

答案 1 :(得分:1)

作为Amit的答案的补充,您可以使用如下语句检查onFormSubmit触发器附带的eventInfo中返回的所有值和参数:

  Logger.log(e);

这将显示如下内容:

enter image description here

(此处显示的值来自我使用的未使用的表单"垃圾"值;-)但实际上看到结构就足够了。)

答案 2 :(得分:0)

对于尝试使用上述相同方法但没有运气的任何人,我发现此链接https://code.google.com/p/google-apps-script-issues/issues/detail?id=5325。总结一下:

function runonformsubmit(e){
    var itemResponses = e.response.getItemResponses();
    var item1 = itemResponses[0].getResponse();
    //OR to get the title of the question
    var title1 = itemResponses[0].getItem().getTitle();
}

我已成功使用此模型来提取回复。以下是我目前使用的代码示例:

function createClientDefaultURLs(e){
    var clientResponses = e.response.getItemResponses();
    var clientFName = clientResponses[0].getResponse();
    var clientLName = clientResponses[1].getResponse();
    var companyName = clientResponses[2].getResponse();
    var companyAddress = clientResponses[3].getResponse();
    var clientEmail = clientResponses[4].getResponse();
}

希望能帮助其他人弄清楚如何从表单提交中提取回复。