2016-07-20 43 views
0

每當用戶提交谷歌的形式,以我的谷歌表,我想觸發了OnSubmit功能,在表單字段中使用的電子郵件地址自動發送電子郵件回覆的電子郵件,一起「正確/錯誤「的提交數據驗證。由於最新的表單提交的數據進入表的最後一排,我嘗試下面的代碼從紙張拉出兩個數據(即使我可以使用函數參數的電子郵件地址)。與計算的發送提交谷歌形式

我還設置了在表單提交事件觸發和電子郵件授權了。但電子郵件似乎並不奏效。如果設置爲在表單提交時觸發,是否還需要在腳本編輯器中運行該功能?當我嘗試點擊運行時代碼超過了執行時間。

function OnSubmit(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = sheet.getLastRow()-1; 
    var numRows = 1; // Number of rows altogether 


    // Fetch the range of cells A(last row):G(last row) 
    var dataRange = sheet.getRange(startRow, 1, numRows, 7); 

    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[2]; // Column C of last row 
    var message = ""; 
    while(row[6] === "") {  // Delay until data verification is done 
    Utilities.sleep(10000); 
    } 
    var subject = row[6] // Column G (data verification cell) of last row 
    MailApp.sendEmail(emailAddress, subject, message); 
    } 
} 
+0

跟蹤使用記錄儀 –

+0

你能否詳細說明,請您執行?這是我第一次嘗試Google Apps腳本。我根據我在線閱讀的內容將代碼放在一起。 –

+0

不能使用這部分代碼:'而(行[6] === 「」){//延遲直到數據驗證完成 使用Utilities.sleep(10000); }'因爲你的數據不會腳本執行期間進行更新,以便循環將永遠是無限的,如果行[6]是空當函數被調用。 –

回答

0

我知道您正在嘗試讓腳本等待,直到計算完成。

然而,

while(row[6] === "") { 
Utilities.sleep(10000); 
} 

是一種錯誤的方式去了解這一點:變量row沒有在循環變化。它可以在數據取線var data = dataRange.getValues();while循環內。

但是有一個更好的方式,以確保比待定更改實際發生:使用

SpreadsheetApp.flush(); 

var data = dataRange.getValues();

這將適用未決計算,並消除該while循環的需要。結果:

function OnSubmit(e) { 
    SpreadsheetApp.flush(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var dataRange = sheet.getRange(sheet.getLastRow(), 1, 1, 7); 
    var data = dataRange.getValues(); 
    var row = data[0]; 
    var emailAddress = row[2]; // Column C of last row 
    var message = ""; 
    var subject = row[6] // Column G (data verification cell) of last row 
    MailApp.sendEmail(emailAddress, subject, message); 
} 
+0

謝謝大家指出循環問題!但是,計算的數據(col G)不在表單提交中,因此我必須嘗試從表單的最後一行取出它,而不是函數參數。此外,還有一個計算延遲,需要檢查計算是否完成,然後才能拉出數據(因此不正確使用循環)。有什麼辦法可以做到這一點? –

+0

OnEdit似乎不工作,因爲工作表必須打開,而這是爲了在工作表關閉時運行。 –

+0

好的,更新了我的回答 –