Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌脚本:变量总是显示未定义_Javascript_Undefined_Google Forms - Fatal编程技术网

Javascript 谷歌脚本:变量总是显示未定义

Javascript 谷歌脚本:变量总是显示未定义,javascript,undefined,google-forms,Javascript,Undefined,Google Forms,我创建了一个谷歌表单,作为我的一个信息论坛的“注册” Google表单中捕获的数据被分配到响应电子表格 电子表格由vlookups根据所选成员编制,效果良好 我想在点击提交后立即为所有注册的人发送自动电子邮件,我也为此创建了一个触发器 问题是在编写代码的初始阶段 第一个代码是: function myfunction(e) { var recipient = e.values[1]; var name = e.values[2]; var members

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

Google表单中捕获的数据被分配到响应电子表格

电子表格由vlookups根据所选成员编制,效果良好

我想在点击提交后立即为所有注册的人发送自动电子邮件,我也为此创建了一个触发器

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

第一个代码是:

   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)  

}
/**
 * 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);
  }
}
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();
  }
}
}
这段代码在测试电子表格上运行良好,但出现以下错误:TypeError:无法从未定义中读取属性“值”。(第2行,文件“代码”)

这一问题仍未解决

第二个代码是:

   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)  

}
/**
 * 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);
  }
}
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();
  }
}
}
此代码的问题是:

  • 触发器仅对“编辑”有效
  • 首次注册时已获得确认的用户;不断收到确认电子邮件,如果有新的注册
  • 为避免第二个代码点2中提到的“重复电子邮件”问题:

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

       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)  
    
    }
    
    /**
     * 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);
      }
    }
    
    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();
      }
    }
    }
    
    函数sendmails2(){
    var sheet=SpreadsheetApp.getActiveSheet();
    var startRow=2;
    var numRows=2;
    var dataRange=sheet.getRange(startRow,2,numRows,2);
    var data=dataRange.getValues();
    对于(变量i=0;i
    该代码的问题是:

  • 同样,触发器在“编辑”上起作用
  • “已发送电子邮件”自动填充前2个表单条目
  • 即使在“Email_Sent”栏被添加之后:重复的电子邮件也会被发送
  • 如果您能解析第一个代码,我将不胜感激。或解决第三个代码中的所有问题。


    谢谢。

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