0

我正在爲人們註冊一個事件製作一個Web表單。我發現我可以使用Google表單和Google電子表格來執行此任務,並且我開始學習如何使用這些Web應用程序。我也想將自動確認電子郵件發送給已經註冊的人。對於此任務,我也在研究Google Apps腳本。據我所知,我應該定義一個函數來發送電子表格中的腳本中的電子郵件,並在'表單提交事件'中觸發該函數。我想確定一個從他/她提交的數據中註冊的人的電子郵件地址,我希望將所有提交的數據以及時間戳記包含在確認電子郵件中。Google電子表格單元格與Google表單輸入字段之間的明確對應

我的問題如下。

  • 我怎樣才能識別存儲在表單的輸入域的值入電子表格單元格?
  • 或者,有什麼方法可以從Google Apps腳本讀取各個輸入字段的值?

如果您能夠引用我一個明確的與這些問題有關的API參考,我會很高興。

到目前爲止,我從Google Drive中提供的幫助頁面瞭解到應用程序,

https://developers.google.com/apps-script/overview

不過,我覺得文件有太多簡潔。

我正在學習如何從這個谷歌Apps腳本發送確認電子郵件: FormSubmissionResponseEmail

我找不到明確涉及谷歌的形式輸入域的幫助文檔,並在谷歌電子表格單元格。從我的有限數量的實驗案例中,似乎時間戳總是存儲在電子表格的第一列中。這是有保證的嗎?據稱,「電子表格提交事件」類的'namedValues'成員被認爲包含「來自表單提交的問題名稱和值」。 (https://developers.google.com/apps-script/understanding_events) 但是,當我修改Google表單時,'namedValues'成員仍保留與刪除的輸入字段對應的元素。有沒有什麼方法可以僅循環'namedValues'中與用戶實際輸入的字段相對應的元素?

我也很高興聽到替代Google表單和Google電子表格的替代工具。

+0

爲什麼不從M Hawksey的應用程序腳本事件管理器開始? http://mashe.hawksey.info/2010/11/eventmanagerv3/ – Mogsdad 2013-04-09 20:26:14

+0

apps腳本文檔是[here](https://developers.google.com/apps-script/),並且最近已更新。所有的類和方法記錄在「參考」下。 – Mogsdad 2013-04-16 18:42:12

回答

2

此答案適用於「新表格」,2013版本,而不是「遺產表格」已停用。

如何識別電子表格中存儲表單中輸入字段值 的單元格?

可以識別將由標籤在1排武警收集答案形式問題與知識,你可以在功能,如通過getRange()列編號引用答案。

...有什麼方法可以從Google Apps腳本中讀取相應輸入 字段的值嗎?

有多種方式來引用輸入值:

  • 正如你在Understanding Events發現,使用表單提交您觸發的功能可以從事件本身檢索輸入值。這裏有兩種選擇;您可以在數組中獲得一組values,您可以使用問題文本作爲名稱引用namedValues

  • 您可以從電子表格中讀取數據;在前面提到的相同的觸發器函數中,可以使用e.range.getValues()來獲得一個包含所有提交值的數組,然後可以通過索引進行引用。請記住,這將是一個基於0陣列,而列編號從1開始

從我有限的實驗例數,似乎 時間戳總是存儲在第一列電子表格。 這是有保證的嗎?

除非您修改電子表格,否則時間戳將位於第一列。可以在由Forms創建的數據表的左側插入列,這會影響在表單中找到表單結果的位置(儘管e.range將進行調整)。以下所有值的順序將以表格中創建的的順序排列。請注意,如果您刪除了一列(因爲您從表單中刪除了該問題,例如),則「刪除」問題的列將在行的末尾重新創建

...當我修改了谷歌的形式,在「namedValues」成員仍然 舉行相應刪除輸入字段中的元素。有沒有 的方法可以將namedValues中對應 的元素循環到用戶實際輸入的字段?

有對過去的記憶問題的原因,雖然他們只是當他們沒有用來收集任何實際數據的麻煩。更好的計劃可以用來避免這個問題!

未回答的問題將爲事件中的空字符串(例如e.namedValues["Dead Question"] == '')。所以,你可以跳過它們是這樣的:

for (var ans in e.namedValues) { 
    if (e.namedValues[ans] != '') { 
    doSomethingWith(e.namedValues[ans] 
    } 
} 

注意,那就是,你可以得到「頭」,或形式問題的陣列,像這樣:

var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
var headers = sheet.getDataRange().getValues()[0]; 

...然後使用搜索headers以查找包含您正在查找的答案的列。

+0

謝謝你的回答。你是如何學習這些規則的?是否有Google提供的文檔,或者您是否從您的經歷中發現了這些文檔?讀你的答案後,我能說出什麼我想更清楚地做:我想獲得輸入字段的值在窗體的當前版本,在字段出現在表單中的順序,無論是否值空值。我可以通過閱讀'namedValues'部分來完成,如果我改變表單中的問題名稱或順序(輸入字段)時記得更新腳本。我可以編寫更多功能的腳本嗎? – norio 2013-04-10 06:57:22

+0

@norio - 主要是通過我自己使用表單獲得的經驗,以及來自StackOverflow和其他論壇的示例。 (嘗試搜索這裏'[谷歌應用程序腳本] + form'。)應用程序腳本給出了形式沒有控制([問題2383](http://code.google.com/p/google-apps-script-問題/問題/細節?id = 2383)),這使得創建一個「多功能腳本」的能力複雜化 - 但聽起來像你有一些應該工作的想法。如果您按照首選順序維護一個包含當前問題的數組,您可以使用它來索引'namedValues'對象。 – Mogsdad 2013-04-10 13:56:57

+0

感謝您的迴應。不幸的是,沒有完整的API參考。 (也許谷歌發佈的源代碼,並認爲是足夠了。)記住電子表格中的腳本來更新無論是在形式的問題和串索引'namedValues' - 這是容易出錯,但我採用它。我只會用一個小事件的形式和腳本,而不會維護它們。 – norio 2013-04-16 18:15:30

相關問題