Google脚本:变量始终显示未定义

问题描述 投票:0回答:1

我创建了一个Google表单,可作为我的一个信息论坛的“注册”。

在Google表单中捕获的数据已分配给响应电子表格。

根据选择的可以正常工作的成员资格,用电子表格来编制电子表格。

我想为任何人发送自动电子邮件,单击“提交”后立即注册,我也为此创建了触发器。

问题在于编写代码的初始阶段。

第一个代码是:

   function myfunction(e) {
      var recipient = e.values[1];
      var name = e.values[2];
      var membership = e.values[18]; 
      var price = e.values[19];
      var features = e.values[20];
      var paymentlink = e.values[21];
      var monthlypay = e.values[22];
      var subscriptionlink = e.values[23];
      var subject = 'Text';
      var body = 'Text'; 

 MailApp.sendEmail(recipient, subject, body)  

}

此代码在测试电子表格上工作正常,但给出以下错误:TypeError:无法从未定义中读取属性“值”。 (第2行,文件“代码”)。

仍未解决。

第二个密码是:

/**
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = 2;
  var dataRange = sheet.getRange(startRow, 1, numRows, 25);
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[1];
    var name = row[2]; 
    var membership = row[18];
    var price = row[20]; 
    var features = row[21];
    var paymentlink = row[22];
    var message = 'Text';    
    var subject = 'Text';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

此代码的问题是:

  1. 触发器仅在“编辑”上起作用
  2. 首先注册时得到确认的用户;如果有人新注册,将不断重复获取确认电子邮件。

为了避免第二代码点2中提到的“重复电子邮件”问题,

我创建了后面的第三个代码:

function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = 2;
  var dataRange = sheet.getRange(startRow, 2, numRows, 2);
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var EMAIL_SENT = 'EMAIL_SENT';
    var emailAddress = row[1];
    var name = row[2];
    var membership = row[18];
    var price = row[19];
    var features = row[20];
    var paymentlink = row[21];
    var monthlypay = row[22];
    var subscriptionlink = row[23];

    var emailSent = row[25];
    if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates

    var message = 'Text';
    var subject = 'Text';

    MailApp.sendEmail(emailAddress, subject, message);
    sheet.getRange(startRow + i, 25).setValue(EMAIL_SENT);
      SpreadsheetApp.flush();
  }
}
}

此代码的问题是:

  1. 再次触发可在“编辑”上使用。
  2. “ Email_Sent”自动填充前2个表单条目。
  3. 甚至在“电子邮件已发送”列被添加之后:重复电子邮件也被发送。

如果您能解决第一个代码,我将不胜感激。要么。解决第三个代码中的所有问题。

谢谢。

javascript undefined google-form
1个回答
0
投票

我猜您的问题是函数参数,因为您知道在nodejs中函数的参数是请求,响应类型,因此根据您的第一个参数是请求,当您要访问它的特定值时,必须使用req .body.values和对于重复发送的邮件,您可以在电子表格中添加一个带有布尔标志的附加列,并根据是否发送邮件来设置和取消设置该布尔标志,并据此选择您的邮件收件人。希望对您有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.