2016-03-23 99 views
0

我看過其他類似的帖子,並得到了一些幫助正確設置觸發器,但仍然有錯誤。
我試圖自動發送一個PDF文件,通過電子郵件發送,以響應谷歌應用中的表單提交。我使用網絡上分享的腳本開始並修復了一些棄用的術語。
我創建了一個嵌入爲佔位符的keyItems文檔模板,我創建了一個表單來捕獲數據。與表單關聯的電子表格按照計劃捕獲數據。我編輯了與電子表格相關的腳本,希望能夠完成提交表單所需的工作。觸發器正確設置爲運行on form submitfrom the spreadsheet。我的問題是關於我反覆詢問e.values未定義的錯誤。我假設我將這些標籤標記爲e.values[0],並且當我聲明這些變量時 - 即它們將基於它們在從電子表格字段中繪製的數組中的順序。對不起長時間囉嗦。如果我將虛擬內容放置在它工作的變量中併發送pdf,所以實際機制工作正常,但我的e.values不起作用。谷歌腳本e.values錯誤

這裏是我的腳本 //結業證書​​

//從谷歌文檔模板,並將其命名爲

var docTemplate = "1V_PqCBZ9vWmmIELp47X12iNtdwRCqHyOyey6VPL0o0Q"; 
var docName = "CertificateOfCompletion"; 

//當表單提交擺脫形式的信息,並設置爲變量

function onFormSubmit(e) { 
    var name = e.values[2]; 
    var email = e.values[3]; 
    var date = e.values[4]; 

//爲提交者創建模板doc的臨時工作副本

var copyId = DriveApp.getFileById(docTemplate).makeCopy(docName+' for '+name).getId(); 

//打開臨時文檔

var copyDoc = DocumentApp.openById(copyId); 

//告訴腳本進入DOC

var copyBody = copyDoc.getBody(); 

//用數據替換佔位符的文檔從提交的表單

copyBody.replaceText('keyFullName', name); 
copyBody.replaceText('keyDate', date); 
copyDoc.saveAndClose(); 

//創建PDf

var pdf = DriveApp.getFileById(copyId).getAs("application/pdf"); 

//發送電子郵件至收件人

var subject = "Certificate"; 
var body = "Congratulations!" + name + " Here is your certificate of completion " ; 
MailApp.sendEmail(email, subject, body, {htmlBody: body, attachments: pdf}); 

//刪除臨時文件

DriveApp.getFileById(copyId).setTrashed(true); } 

回答

0

您是否嘗試過使用命名值來代替。

這裏有一個例子

var handling = Number(e.namedValues["Call Handling"]); 
var security = Number(e.namedValues["Security"]); 
var agentName = String(e.namedValues["Agent Name"]); 

這些都是在一個形式我有疑問。 e.namedValues [「text here」])之後的位; ,在這裏將文本替換爲表單響應中所調用的任何列,這將是問題名稱。

我不確定爲什麼e.values [0]以後不適合你,因爲它適合我。

我的腳本在電子表格中,通過菜單安裝了onFormSubmit觸發器。另外請記住,要測試您的腳本,您必須sumbit表單,點擊播放按鈕將不起作用,因爲沒有事件傳遞給您的函數。