2012-05-28 58 views
0

我的客戶填寫了一份Google表單。每次有人填寫調查表時,我如何自動創建Google聯繫人?我不希望有複製每次粘貼剛剛創造我的Gmail新聯繫人自動從我的Google表單中創建Google聯繫人

我想使用這個腳本,但得到一個錯誤,當我嘗試用一​​些測試數據運行

function onFormSubmit(e) { 
    var timestamp = e.values[0]; 
    var firstName= e.values[1]; 
    var lastName= e.values[2]; 
    var email= e.values[3]; 
    var phone= e.values[4]; 
    ContactsApp.createContact(timestamp , firstName , lastName , email , phone); 
} 

TypeError: Cannot read property "values" from undefined. (line 2

+0

當您通過腳本編輯器手動運行此函數時,您不會像自動觸發時那樣獲得'e'參數對象。這就是爲什麼它的'undefined'。要手動運行它,你需要用一些測試值初始化'e'參數。 –

回答

0

當試圖手動運行該功能時,您將看到該錯誤消息,因爲沒有事件被傳遞給函數。

無視該帖子的其餘部分(請參閱Henrique的評論)。

According to the documentation:

An event is passed to every event handler as the argument (e) . You can add attributes to the (e) argument that further define how the trigger works or that capture information about how the script was triggered.

If you use the attributes, you must still set the trigger from the Resources menu, as described in the sections above.

https://developers.google.com/apps-script/guide_events#TriggerAttributes

I can't explain why this is the case, but it seems you need to use the simple event handler (ie naming the function onFormSubmit), as well as applying an installable event handler to that same function. Then, for me at least, it works as expected.

HTH, Adam

+0

我已經設置了我的觸發器在表單提交上運行;我應該立即在Google帳戶中看到新聯繫人,還是需要一段時間;還沒有爲我工作 – user1420867

+0

函數onFormSubmit(e){ var firstName = e.values [1]; var lastName = e.values [2]; var email = e.values [3]; var phone = e.values [4]; var contact = ContactsApp.createContact(firstName,lastName,email,phone); } – user1420867

+1

@AdamL'on form sumit'沒有簡單的事件處理函數,就像'onOpen'和'onEdit'一樣。因此,命名onFormSubmit完全沒有作用,它可以是任何名稱。重要的是設置可安裝的觸發器。 –

0

有在createContact功能沒有 「手機」 的說法。在嘗試從更難調試的觸發器創建它之前,您是否試過編寫一個簡單的函數來創建一個簡單的聯繫人來檢查您是否正確?

此外,我還記得一個old error與表單提交參數,可能會回來。無論如何,在所有參數中添加toString並沒有什麼壞處。例如

var email = e.values[3].toString(); //just to be sure 
+0

function onFormSubmit(e){ var timestamp = e.values [0]; var firstName = e.values [1]; var lastName = e.values [2]; var email = e.values [3] .toString(); //只是爲了確保 ContactsApp。createContact(firstName,lastName,email); }好吧,嘗試像這樣非常簡單的3列表,但沒有創建聯繫人;我的觸發器設置爲從電子表格/表單提交 – user1420867

+0

我建議您嘗試一個更簡單的直接代碼來添加聯繫人,稍後增加「複雜性」(例如從觸發器運行)。你試過了嗎? –

+0

不知道如何做到這一點,是否沒有觸發你的建議 - 所以刪除觸發器?那簡單的代碼是什麼樣的?它在同一個腳本區域嗎? – user1420867