Apps脚本onFormSubmit触发器

问题描述:

我在Google表单的结尾处有以下代码。表单中的第一个值是我试图用作将要创建的文件的名称的字符串。只是在尝试自己提交假表单时进行测试。我知道触发器本身是基于我的第一行代码(现在注释掉)工作。我正在尝试排查什么是错的。Apps脚本onFormSubmit触发器

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

创建触发器的屏幕提供失败的电子邮件通知。将其设置为“立即”。该电子邮件将包含发生错误的行和错误消息。 – 2016-06-11 01:14:26

变量AnswerObject就像您命名为对象您将不会访问带有索引但带有名称的对象内容。
您需要设置目录名与您感兴趣的问题的名称
如:我的表单的问题之一是“目录名”所以我会设置目录名这样的: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); 
    } 
} 
+0

问题是我不能在不提交真实窗体的情况下测试“e”值,因此在控制台中记录值不起作用。我在原文中也提到我尝试了两种对象方法。 – IntegrateThis