如何根据Google电子表格中更改的单元格发送通知

时间:2014-06-17 22:23:13

标签: javascript google-apps-script google-sheets sendmessage

我知道它类似于 email notification if cell is changed

但我想做以下事情:

在A栏中,我有提醒名称,B列我有电话,列F有状态

状态值为1,2,3,4,5

所以基本上我想在F列变为4,5时发送一封电子邮件,其中包含A栏和B栏的信息。

示例:提醒名称刚刚更改为状态4,请给他们打电话:电话号码

function checkReminder() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
  var sheet = spreadsheet.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var startRow = 2;
  var range = sheet.getRange(2,5,lastRow-startRow+1,1 );
  var numRows = range.getNumRows();
  var sV = range.getValues();
  range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
  var reminder_info_values = range.getValues();

  var warning_count = 0;
  var msg = "";


  for (var i = 0; i <= numRows - 1; i++) {
    var statusC = sV[i][0];
    if(statusC > 3) {
      var reminder_name = reminder_info_values[i][0];

      msg = msg + "The reminder: "+reminder_name+" changed status to "+statusC +" ";
      warning_count++;
    }
  }

  if(warning_count) {
    MailApp.sendEmail("email@email.com",
        "CC Changed status of "+ reminder_name, msg);
  }

};

我不知道如何让它发挥作用,请帮助

我也试过这个Send Email when value changes in Google Spreadsheet

2 个答案:

答案 0 :(得分:1)

您的脚本缺少一项重要功能:您应该记住在发送邮件之前是否已经发送过邮件,否则每次读取邮件时都会发送邮件。

有很多方法可以实现这一点,添加一个带有“邮件发送”标志的列可能是最常见但绝对不是我喜欢的那个......

这是一个在发送邮件时为单元格着色的版本,我选择红色但当然可以更改为更离散的颜色。 (我添加了一个记录器,因此您可以轻松地看到十六进制代码的颜色)

function checkReminder() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
  var sheet = spreadsheet.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var startRow = 2;
  var range = sheet.getRange(2,5,lastRow-startRow+1,1 );
  var numRows = range.getNumRows();
  var sV = range.getValues();
  var bGColors = range.getBackgroundColors();// get range background colors
  var range_reminder = sheet.getRange(2, 1, lastRow-startRow+1, 1);
  var reminder_info_values = range_reminder.getValues();

  var warning_count = 0;
  var msg = "";


  for (var i = 0; i <= numRows - 1; i++) {
    var statusC = sV[i][0];
    Logger.log(bGColors[i][0]);
    if(statusC > 3 && bGColors[i][0] != '#ff0000') { // if not already sent
      var reminder_name = reminder_info_values[i][0];
      bGColors[i][0] = '#ff0000';
      msg = msg + "The reminder: "+reminder_name+" changed status to "+statusC +" ";
      warning_count++;
    }
  }
  range.setBackgroundColors(bGColors);// update sheet with colors
  if(warning_count>0) {
    MailApp.sendEmail("email@email.com",
                      "CC Changed status of "+ reminder_name, msg);
  }

};

您可以设置一个触发器,在onEdit或定时器上调用此脚本,两种方法都可以工作,这是一个选择问题(除非您绝对需要立即反应)。

答案 1 :(得分:0)

您可以使用onEdit()

如果值在F列中,现在为4或5,则发送电子邮件。

https://developers.google.com/apps-script/understanding_events