2013-07-19 54 views
0

我對Google Apps腳本比較陌生,並且使用的是一年前創建的非常簡單的腳本,當用戶通過Google表單提交輸入時會觸發該腳本。這個腳本一直運行得非常好,直到今年五月,我一直在試圖弄清楚當我沒有對我的代碼做任何修改時發生了什麼。我搜查了很多不同的地方,似乎無法找到問題所在。獲取有效的電子表格行

基本上,我有一個表格,用戶完成,然後提交。提交後,腳本將從最近一行中獲取輸入,並將它們存儲在變量中,然後將這些變量彙編到確認每個用戶提交的輸入的電子郵件消息確認中。

這裏是我的代碼:

function acknowledgement() { 

var ActiveSheet = SpreadsheetApp.getActiveSheet(); 
var ActiveRow = ActiveSheet.getActiveRange().getRow(); 
var emailAddy = ActiveSheet.getRange("E"+ActiveRow).getValue(); 
var locvar = ActiveSheet.getRange("C"+ActiveRow).getValue(); 
var employeevar = ActiveSheet.getRange("B"+ActiveRow).getValue(); 

var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Variables"); 
var contactvar = sh.getRange("A2").getValue(); 
var subject = sh.getRange("B2").getValue(); 
var contactvar2 = sh.getRange("C2").getValue(); 

var linebrk = "<br />"; 

var msg = "Dear " + employeevar + "," 
    + linebrk + linebrk 
    + "This confirms that you have completed your review of the latest security presentation." 
    + linebrk + linebrk 
    + "Your location number is " + locvar + "." 
    + "Thank you very much for your participation." 
    + linebrk + linebrk 
    + contactvar; 

var msghtml = '<p>'+msg+'</p>'; 

var advancedargs = {cc:contactvar2, htmlBody:msghtml}; 
MailApp.sendEmail(emailAddy, subject, msg, advancedargs); 

}; 

什麼正在發生的事情是,我的代碼不再抓住當前行號(即剛通過用戶提交的活動行)。相反,它只是簡單地抓住工作表的第一行(即我的行標題,例如「員工姓名」,「電子郵件地址」等),並將這些行標題分配給變量,從而在嘗試發送電子郵件確認時產生錯誤。例如,我的變量emailAddy將包含「電子郵件地址」,導致sendEmail失敗。

任何反饋將不勝感激!

馬丁

+0

我想你在這個確認功能上設置了一個'在表單提交'上的觸發器?第二個問題:在最後一個答案的行下方是否有任何內容? –

+0

嗨,Serge,是的,我確實設置了「onFormSubmit」觸發器。而且,最後的答案之下沒有任何東西。已經通過Google表單添加了行,沒有問題,但是我只是沒有收到電子郵件確認信息,用戶也沒有提交他們的輸入。謝謝! – Martin

回答

0

在表單提交的背景下,使用getActiveRow是有些奇怪,因爲人們不能認爲用戶是在紙張上實際活躍...我不知道你爲什麼選擇這個做法,我「M居然不知道這是怎麼發生了這麼久的工作...

還有其他的可能性,以處理表單提交,但是一個將需要最少變化在你的代碼是簡單地使用getLastRow()代替getActiveRange().getRow()

使用這個簡單的「策略」有幾個風險a當2人或更多人同時發送表單時,可能會出現併發問題。 另一種解決方案是直接從表單提交時的事件屬性中獲取所有字段值,因爲在這種情況下,每個事件都是唯一的,不管它如何進入電子表格,但腳本必須更深入地重寫。

+0

我最初的想法是,當用戶提交表單並觸發腳本時,當前記錄最終成爲通過表單添加到電子表格的記錄。我不確定它是如何完全停止工作的。我很感謝幫助,並會嘗試這兩種方法。我同意更簡單的一個在併發方面提出問題。 – Martin

0

我相信Google Forms很好地涵蓋了您提到的情況,觸發器「onFormSubmit」電子表格,接收一個對象作爲參數,包含您需要的所有信息。

我同意Serge的腳本被深刻改寫,但是肯定的是,它會節省很多問題。

轉到文檔,特別是在「電子表格提交事件」https://developers.google.com/apps-script/understanding_events中。

相關問題