2016-06-10 104 views
-1

我在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

回答

-1

變量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

相關問題