我正在通過 Google 表單收集請求,并將它們存盤在 Google 表格中。所以每當有新的提交來時,我想根據選擇發送一封電子郵件。
目前我創建了一個單獨的選項卡,其中存在電子郵件的國家和收件人。

在我的表單回應選項卡中,我寫了一個公式:
=query(ArrayFormula(iferror(vlookup(B2:B;Sayfa2!$A$2:$B$4; 2; false))); "where Col1 <>''")
看起來像:

所以當新的提交來的時候拉資料。但是,我的 GAS 不會觸發電子郵件
//setup function
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (ActiveSheet.getName() == 'Form Yan?tlar? 1') {
var StartRow = 2;
var RowRange = ActiveSheet.getLastRow() - StartRow 1;
var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,4);
var AllValues = WholeRange.getValues();
var message = ""
//iterate loop
for (i in AllValues) {
//set current row
var CurrentRow = AllValues[i];
var row = AllValues[i]
var alertRecipient = row[3];
var emailMessage= row[2];
var emailSubject = "A suggestion received for your style guide"
//set HTML template for information
message =
"<p><b>Option: </b>" CurrentRow[1] "</p>"
"<p><b>Comment: </b>" CurrentRow[2] "</p>"
"<p><b>Recipient: </b>" CurrentRow[3] "</p>"
"</p><br><br>";
}
}//For loop close
//define who to send emails to
// var SendTo = "[email protected]";
//set subject line
// var Subject = "New Form";
//send the actual email if message is not empty
if (message) {
MailApp.sendEmail(alertRecipient,emailSubject,emailMessage);
}//if message
}//if sheetName Review
//End Func
我將 GAS 觸發器設定為 onEdit。
你能幫我理解我在哪里做的錯誤嗎?
非常感謝 advabce!
uj5u.com熱心網友回復:
試試這個,啟動一次 myTriggerSetup
const adresseEmail = '[email protected]'
const sujet = 'New form ...'
function myTriggerSetup() {
if(!isTrigger('onFormSubmit')) {
ScriptApp.newTrigger('onFormSubmit')
.forSpreadsheet(SpreadsheetApp.getActive())
.onFormSubmit()
.create();
}
}
function isTrigger(funcName) {
var r=false;
if(funcName) {
var allTriggers=ScriptApp.getProjectTriggers();
var allHandlers=[];
for(var i=0;i<allTriggers.length;i ) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if(allHandlers.indexOf(funcName)>-1) {
r=true;
}
}
return r;
}
function onFormSubmit(e) {
var responses = e.namedValues;
getData(eval(responses))
MailApp.sendEmail({
to: adresseEmail,
subject: sujet,
htmlBody: '<table>' result '</table>',
});
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd MMM yyyy hh:mm a");
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getActiveRange().getRow();
var column = e.values.length 1;
sheet.getRange(row, column).setValue('Envoyé : ' d);
}
let result = ''
function getData(obj) {
for (let p in obj) {
if (obj[p]!=null){
if (typeof obj[p] != 'object' && typeof obj[p] != 'function'){
result = '<tr><td>' obj[p] '</td></tr>';
}
if (typeof obj[p] == 'object') {
if (obj[p].length){
result = '<tr><td><b>' p ' :</b></td></tr>';
}
getData(obj[p]);
}
}
}
}
uj5u.com熱心網友回復:
出于檔案目的發布此內容,JPV在評論中提供了解決方案。
問題:
- 一個onEdit觸發的火災時,用戶手動地在電子表格中改變的值。導致向作業表添加新行的表單提交不會觸發此觸發器。
- 一個簡單的
onEdit觸發器將無法執行發送電子郵件之類的操作,因為這需要授權,一個簡單的觸發器無法訪問需要授權的服務(請參閱限制)。
解決方案:
- 安裝一個
onFormSubmit觸發器,它會在提交表單時觸發。這可以為您的表單或提交資料發送到的電子表格安裝。您可以手動或以編程方式安裝它。 - 而不是使用的
SpreadsheetApp方法來獲取表單回應資料,使用Event物件,其中也包含提交資料(這些是物件的欄位,如果你安裝了電子表格觸發器,這些如果您的表單中安裝的是那些)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376108.html
