应用程序脚本onFormSubmit触发器

时间:2016-06-10 15:09:51

标签: google-apps-script triggers google-form

我在Google表单末尾有以下代码。表单中的第一个值是一个字符串,我尝试将其用作将要创建的文件的名称。只是在自己提交虚假表格时尝试测试一下。我知道触发器本身是基于我的第一行代码(现在注释掉)工作。我正在尝试排除错误。

    Function onFormSubmit(e) {
     // this line works var NewSpreadSheets = SpreadsheetApp.Create("testing");
     var AnswerObject = e.namedValues;
     var DirectoryName = AnswerObject[0][0]; //toString() necessary??
     if (DirectoryName) {
     var ssNew = SpreadsheetApp.create("Empty");
    ssNew.getRange('A1').setValue(DirectoryName);
    } 

编辑:如果我尝试AnswerObject['Directory'][0],就会发生同样的事情。

代码没有响应if语句,并且经过一些其他测试我知道代码行放置后,似乎我的e.namedValues对象出现了问题。任何帮助排除故障都会很棒。

1 个答案:

答案 0 :(得分:-1)

变量AnswerObject就像你命名为对象一样,你不会访问带索引但带名字的对象内容。
您需要使用您感兴趣的问题的名称设置DirectoryName 例如:我的一个表格问题是"目录的名称"所以我将像这样设置directoryName:var DirectoryName = AnswerObject["name of the directory"]
您还应该使用Logger.log()来检查它会发生什么,这样可以节省您的时间,比在电子表格中写一些内容更有效率
JS变量的最后一件事以小写字母开头,它不会破坏你的代码,但它是一个惯例(同样适用于'函数')

function onFormSubmit(e) {
  Logger.log(JSON.stringify(e));
  var AnswerObject = e.namedValues;
  Logger.log(AnswerObject);
  var directoryName = AnswerObject[0];
  Logger.log(directoryName); // this is undefined as there is nothing at the index 0
  //var DirectoryName = AnswerObject[0][0]; //toString() necessary??
  if (directoryName) {
    Logger.log("in it"); // never triggered
    var ssNew = SpreadsheetApp.create("Empty");
    ssNew.getRange('A1').setValue(directoryName);
  }
}