Google应用脚本触发器无效

8 triggers eventtrigger google-sheets google-apps-script google-forms

我有一个发送电子邮件的谷歌应用程序脚本,我设置了一个触发器,以便它在每个表单提交时发送电子邮件.问题是触发器在最初的几分钟内完全正常,但后来甚至在输入正确的数据之后.脚本不发送邮件,我必须手动按下脚本的执行按钮.这是我的代码

var EMAIL_SENT = "EMAIL_SENT";
function sendEmailsapp() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A2:B3

  var dataRange = sheet.getRange(startRow, 1, numRows,8)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[4];  // First column
    var message = row[5];       // Second column
    var emailSent = row[7];  // Third column
    var money=row[6]
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "You have been registered for follwoing events:-";
      var event;

      MailApp.sendEmail(emailAddress, subject, "Please bring your college id and copy of this mail either in phone or printed paper"+
                        "\n\n"+"Name:-"+row[1]+"\n"+"USN:-"+row[2]+"\n"+"Mobile:-"+row[3]+"\n"+"Event:-"+ message+"\nMoney status:-"+money+"You registered on"+row[0]);
        sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);


      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常.唯一的问题是触发器.

这是我的触发器的图像.sendEmailsapp是触发器,sendEmailsweb是另一个也遇到同样问题的触发器.图片

这是日志 在此输入图像描述

我唯一的问题是触发器没有被触发,它不是发送电子邮件.

小智 21

即使脚本是正确的,我的触发器也不像你的那样工作.

解决方案非常愚蠢.我删除了触发器并添加了一个新触发器.完全相同的触发器.

  • 你救了我,我已经调试了 5 个多小时,这就是解决方案。感谢倾城网络解决方案! (2认同)

小智 10

我的脚本遇到了这个问题,但我使用Time-Driven作为事件.我每分钟设置它,但它不会做任何事情.使用上面写的日志记录方法,我发现触发器工作正常 - 我设置的每一分钟.但它实际上并没有像我明确点击"运行"按钮时那样做.

我怀疑它与以下行有关:

var sheet = SpreadsheetApp.getActiveSheet();
Run Code Online (Sandbox Code Playgroud)

所以我玩了它并改为:

var spreadsheet = SpreadsheetApp.openById("INSERT_SPREADSHEET_ID_HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
Run Code Online (Sandbox Code Playgroud)

它终于奏效了.

替换INSERT_SPREADSHEET_ID_HERE为电子表格的ID(来自您的网址https://docs.google.com/spreadsheets/d/INSERT_SPREADSHEET_ID_HERE/edit#gid=0).

从中getSheets()[0],这0将是您在该特定电子表格中可能的多张表格中的第一张.

我希望这有助于任何方式.


Ala*_*lls 3

我愿意打赌问题不是触发因素。即使您的代码可以工作,也可能存在阻止代码的条件部分工作的条件。您可以测试该函数是否确实正在触发,即使它没有给您预期的结果。Logger.log()紧接着函数后面放置一条语句:

function sendEmailsapp() {
  Logger.log('sendEmailsapp ran!');
Run Code Online (Sandbox Code Playgroud)

然后查看日志。我不敢相信该功能没有被触发。电子邮件可能不会发送,但我愿意打赌您会收到“sendEmailsapp run!”这条消息。打印到日志。所以,这是你需要做的第一件事。

您需要做的下一件事是Logger.log()在检索电子邮件后立即发表声明:

var emailSent = row[7];
Logger.log('value of the email is: ' + emailSent);
Run Code Online (Sandbox Code Playgroud)

然后检查日志以了解实际返回的值。如果返回的每个值都是“EMAIL_SENT”,则不会发送任何电子邮件。

我们需要知道实际结果是什么。您需要提供打印到日志的内容。