Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Google apps script 谷歌表单-电子邮件_Google Apps Script_Google Sheets_Gmail_Google Forms - Fatal编程技术网

Google apps script 谷歌表单-电子邮件

Google apps script 谷歌表单-电子邮件,google-apps-script,google-sheets,gmail,google-forms,Google Apps Script,Google Sheets,Gmail,Google Forms,我正在考虑在提交谷歌表单时自动触发电子邮件。它工作得很好,但是下面的代码有3个问题 每次回复都会触发两封电子邮件,而我只想发送一封电子邮件 电子邮件是从“所有者”的ID发送的,而不是在谷歌表单上提交回复的 它应该将所有成功发送的电子邮件的状态捕获为col7中的“email sent”,但它没有这样做 //已成功发送。 var EMAIL_SENT=“EMAIL_SENT”; 函数sendmails2(){ var sheet=SpreadsheetApp.getActiveSheet(); va

我正在考虑在提交谷歌表单时自动触发电子邮件。它工作得很好,但是下面的代码有3个问题

  • 每次回复都会触发两封电子邮件,而我只想发送一封电子邮件
  • 电子邮件是从“所有者”的ID发送的,而不是在谷歌表单上提交回复的
  • 它应该将所有成功发送的电子邮件的状态捕获为col7中的“email sent”,但它没有这样做
  • //已成功发送。
    var EMAIL_SENT=“EMAIL_SENT”;
    函数sendmails2(){
    var sheet=SpreadsheetApp.getActiveSheet();
    var startRow=2;//要处理的第一行数据
    var numRows=sheet.getLastRow();//要处理的行数
    var dataRange=sheet.getRange(numRows,2,1,sheet.getLastColumn());
    //获取范围中每一行的值。
    var data=dataRange.getValues();
    对于(变量i=0;i
    试着这样做:

    function sendEmails() {
      var sheet=SpreadsheetApp.getActiveSheet();
      var startRow=2;  
      var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//I think startRow is a better fit for the first parameter and my guess is that you did't really intend for data.length to be only 1 row.
      var data=dataRange.getValues();
      for (var i=0;i<data.length;++i) {
        var row=data[i];
        var emailAddress=row[5];//column 6
        var message=Utilities.formatString('Hello,\n\nWe have received an inquiry from your customer in Inbound.\n\nLead No is - %s\n\nKindly arrange a callback.\n\nRegards,\nTeam Inbound\n\nThis is an auto-generated email.',row[1]);    
        var emailSent = row[7];//column 8
        if (emailSent != "EMAIL_SENT") {  // Prevents sending duplicates
          var subject = "Inbound Inquiry"+ " - " + row[1];//column 2
          MailApp.sendEmail(emailAddress, subject, message);
          sheet.getRange(startRow + i, 8).setValue("EMAIL_SENT");//column 8 and I don't think it's necessary to flush in the loop
        }
      }
    }
    
    函数sendEmails(){ var sheet=SpreadsheetApp.getActiveSheet(); var startRow=2; var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//我认为startRow更适合第一个参数,我猜您并不是真的希望data.length只有一行。 var data=dataRange.getValues();
    对于(var i=0;如果对于我们这些不太敏感的人,请您添加一些关于您的答案如何解决OP问题的解释。我可以看到您的数据范围从A列开始,OP在B列;您的范围涵盖所有数据,OP仅一行;您不需要刷新(如果您不介意我这样说的话);然后呢?好吧,我的猜测是OP实际上并不打算只显示一行。所以,是的,这有点猜测。以类似的方式,我不认为OP真的想在这里使用numRows
    sheet.getRange(numRows,2,1,sheet.getLastColumn())我认为startRow更有意义。最后,我认为没有必要冲洗。它只是堵塞了循环。听起来很合理。但我仍然对它如何解决OP的三个问题感到困惑。我想布丁的证据在于吃——OP希望在某个时候会作出回应。关于两封电子邮件的问题他的建议可能会有所帮助:
    
    function sendEmails() {
      var sheet=SpreadsheetApp.getActiveSheet();
      var startRow=2;  
      var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//I think startRow is a better fit for the first parameter and my guess is that you did't really intend for data.length to be only 1 row.
      var data=dataRange.getValues();
      for (var i=0;i<data.length;++i) {
        var row=data[i];
        var emailAddress=row[5];//column 6
        var message=Utilities.formatString('Hello,\n\nWe have received an inquiry from your customer in Inbound.\n\nLead No is - %s\n\nKindly arrange a callback.\n\nRegards,\nTeam Inbound\n\nThis is an auto-generated email.',row[1]);    
        var emailSent = row[7];//column 8
        if (emailSent != "EMAIL_SENT") {  // Prevents sending duplicates
          var subject = "Inbound Inquiry"+ " - " + row[1];//column 2
          MailApp.sendEmail(emailAddress, subject, message);
          sheet.getRange(startRow + i, 8).setValue("EMAIL_SENT");//column 8 and I don't think it's necessary to flush in the loop
        }
      }
    }