Google apps script 更新谷歌表单提交时发送电子邮件

Google apps script 更新谷歌表单提交时发送电子邮件,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我读过很多关于在提交表单时通过电子邮件通知某人并在电子邮件中包含表单数据的帖子,但我想做的是识别现有信息的更新,并将其放入电子邮件中发送。我想这可以通过识别最新的时间戳并获取相应的条目来实现。然而,我极为有限的编程技能意味着我无法找到答案。碰巧我的技巧袋中有这样一个函数 此函数假定您有一个触发器函数formSubmitted(e),用于表单提交,该函数利用它接收的事件对象。正如您猜测的,它标识了最新的更新。然后,它创建一个模拟表单提交事件,并调用表单提交触发器函数 将onChange()up设置

我读过很多关于在提交表单时通过电子邮件通知某人并在电子邮件中包含表单数据的帖子,但我想做的是识别现有信息的更新,并将其放入电子邮件中发送。我想这可以通过识别最新的时间戳并获取相应的条目来实现。然而,我极为有限的编程技能意味着我无法找到答案。

碰巧我的技巧袋中有这样一个函数

此函数假定您有一个触发器函数
formSubmitted(e)
,用于表单提交,该函数利用它接收的事件对象。正如您猜测的,它标识了最新的更新。然后,它创建一个模拟表单提交事件,并调用表单提交触发器函数

onChange()
up设置为在电子表格更改时触发

/**
*有时候,谷歌应用程序脚本很糟糕。这是其中一次。
*如果用户使用“编辑”链接更新以前提交的表单数据,
*该数据将在表单响应表中更新。不幸的是,
*这将不会生成电子表格提交事件。(见说明:
* https://code.google.com/p/google-apps-script-issues/issues/detail?id=2969#c12)
*
*观察:表单编辑显示为更改,类型为“其他”,来源为
*使用activeSheet=“Form Responses”和activeRange=“A1”创建电子表格。我们
*将使用该信息限制我们强制提交正常表单的时间
*要运行的处理程序。不幸的是,事件没有告诉我们哪一行发生了变化,
*但这应该是最新的时间戳。
*/
函数onChange(e){
如果(如changeType!=“其他”)返回;
if(e.source.getActiveSheet().getName().indexOf(“表单响应”)=-1)返回;
if(e.source.getActiveRange().getA1Notation()!=“A1”)返回;
//查找最新提交的表格
var sheet=e.source.getActiveSheet();
var timeStamps=sheet.getRange(“A2:A”).getValues();
//确定最近日期
var max=Math.max.apply(null,转置(时间戳)[0]);
var properties=PropertiesService.getDocumentProperties();
var lastMax=properties.getProperty(“maxDate”);
if(lastMax&&max.toString()==lastMax)return;//避免由onChange函数的更新触发的更改
Logger.log(“onChange()认为有一个表单edit.e=“+JSON.stringify(e));
setProperty(“maxDate”,max.toString());
var maxDate=新日期(最大值);
//然后找到包含它的图纸行

对于(var row=0,found=false;row碰巧我的技巧包中有这样一个函数

此函数假定您有一个表单提交的触发器函数
formSubmitted(e)
,该函数利用它接收的事件对象。正如您所猜测的,它标识最新的更新。然后创建一个模拟表单提交事件,并调用表单提交触发器函数

onChange()
up设置为在电子表格更改时触发

/**
*有时候,谷歌应用程序脚本很糟糕。这就是其中之一。
*如果用户使用“编辑”链接更新以前提交的表单数据,
*这些数据将在表单响应表中更新。不幸的是,
*这将不会生成电子表格提交事件。(请参阅说明:
* https://code.google.com/p/google-apps-script-issues/issues/detail?id=2969#c12)
*
*观察:表单编辑显示为更改,类型为“其他”,来源为
*使用activeSheet=“Form Responses”和activeRange=“A1”创建电子表格。我们
*将使用该信息限制我们强制提交正常表单的时间
*处理程序运行。不幸的是,事件没有告诉我们更改了哪一行,
*但这应该是最新的时间戳。
*/
函数onChange(e){
如果(如changeType!=“其他”)返回;
if(e.source.getActiveSheet().getName().indexOf(“表单响应”)=-1)返回;
if(e.source.getActiveRange().getA1Notation()!=“A1”)返回;
//查找最新提交的表格
var sheet=e.source.getActiveSheet();
var timeStamps=sheet.getRange(“A2:A”).getValues();
//确定最近日期
var max=Math.max.apply(null,转置(时间戳)[0]);
var properties=PropertiesService.getDocumentProperties();
var lastMax=properties.getProperty(“maxDate”);
if(lastMax&&max.toString()==lastMax)return;//避免由onChange函数的更新触发的更改
Logger.log(“onChange()认为有一个表单edit.e=“+JSON.stringify(e));
setProperty(“maxDate”,max.toString());
var maxDate=新日期(最大值);
//然后找到包含它的图纸行

对于(var row=0,found=false;row您可以使用Google应用程序脚本执行此操作,打开存储表单响应的电子表格。 进入工具->脚本编辑器->脚本编辑器将被打开,复制下面的功能

创建触发器以在表单提交时调用此函数 资源->当前项目的触发器->选择“来自电子表格”和“表单提交”并创建触发器

function sendEmailNoti(e) {
   var timeStamp = e.values[0];
   var userEmail = e.values[1];
   var products = e.values[2];

   var subject = "New Subscription Request";
   var email = "abcd@yourdomain.com";
   var message = "User email : " + userEmail + "<BR>Products opted : " + products + "<BR>Timestamp : " + timeStamp;


   MailApp.sendEmail({
     to: email,
     subject: subject,
     htmlBody: message
   });
}
函数sendmailnoti(e){
var timeStamp=e.values[0];
var userEmail=e.values[1];
var乘积=e.值[2];
var subject=“新订阅请求”;
var电子邮件=”abcd@yourdomain.com";
var message=“用户电子邮件:“+userEmail+”
产品选择:“+Products+”
时间戳:“+Timestamp; MailApp.sendmail({ 致:电邮:, 主题:主题,, htmlBody:消息 }); }
您可以使用Google应用程序脚本,打开存储表单响应的电子表格来完成此操作。 进入工具->脚本编辑器->脚本编辑器将被打开,复制下面的功能

创建触发器以在表单提交时调用此函数 资源->当前项目的触发器->选择“来自电子表格”和“表单提交”并创建触发器

function sendEmailNoti(e) {
   var timeStamp = e.values[0];
   var userEmail = e.values[1];
   var products = e.values[2];

   var subject = "New Subscription Request";
   var email = "abcd@yourdomain.com";
   var message = "User email : " + userEmail + "<BR>Products opted : " + products + "<BR>Timestamp : " + timeStamp;


   MailApp.sendEmail({
     to: email,
     subject: subject,
     htmlBody: message
   });
}
函数sendEm