当单元格值达到0且应将邮件发送到相应的电子邮件ID时,如何自动发送电子邮件

时间:2020-10-12 06:03:28

标签: google-apps-script

当我在G列中的数据达到“ 0”且该电子邮件应发送到相应的电子邮件,并且内容也应对应于值0时,我正在尝试对该电子邮件进行分类。

Please check the image for the data table created, In no.of months left column, now it is 9, but when it reaches zero, i need the message in H column to be sent to C column mail id

我无法为其编写代码,因此请寻求帮助

function SendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet2=ss.getSheetByName('Sheet2');
var sheet4=ss.getSheetByName('Sheet4');
var monthsleft = sheet2.getRange(2,10).getValues();
var fullRange = sheet2.getRange("J2:J").getValues();
var scriptProperties = PropertiesService.getScriptProperties();
var p=sheet2.getLastRow();
for (var j = 2; j < p+1 ; j++ ) {
  if (monthsleft ==0){
var n=sheet2.getLastRow();
for (var i = 2; i < n+1 ; i++ ) {
  var emailAddress = sheet2.getRange(i,11).getValue();
  var subject = sheet4.getRange(2,1).getValue();;
  var message = sheet4.getRange(2,2).getValue();
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
}

1 个答案:

答案 0 :(得分:0)

我不确定您从何处获取该代码,如果可能的话,通常应该引用代码的来源。

与您的代码一起发出

  • 它引用了两个工作表,而在您的示例中只有一个。
  • 它使用的PropertiesService与您的问题根本不相关,至少您没有提到它为何相关。
  • 您不了解如何使用for循环。请查看this reference

建议的解决方案

我已经重写了许多旨在在每个工作日上午9点运行的代码。

首先,将代码替换为以下内容:

function SendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1"); // INSERT YOUR SHEET NAME HERE
  var data = sheet.getDataRange().getValues(); // this gets all data in sheet
  data.shift(); // removes the first row (headers)

  data.forEach((row) => {
    var monthsLeft = row[6]; // gets number from 7th column (Months left)
    if (monthsLeft == 0) {
      var email = row[2]; // gets email
      var message = row[7]; // gets message
      MailApp.sendEmail(email, "Notification", message);
    }
  });
}

function createTriggerWeekday() {
  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('SendEmail')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

然后插入包含您发布的示例数据的工作表的正确名称。 它应该在同一列中,否则它将无法正常工作。即,G列中剩余的月份等。通过从脚本编辑器中运行功能SendEmail来测试该功能。这应该发送0列中所有带有G的行的电子邮件。

如果可以,请运行createTriggerWeekday函数来设置time-driven trigger

您可以通过script.google.com

管理触发器

说明和参考。

  • getDataRange-我使用此方法将电子表格中的所有数据获取到Apps脚本中。这样,比每次发出请求都更快,更容易。它返回一个包含所有数据的二维数组。
  • forEach-我遍历了每一行。