【问题标题】:Sending Email from Google Apps从 Google Apps 发送电子邮件
【发布时间】:2016-06-19 16:41:29
【问题描述】:

我对 Google Apps(尤其是 Google 电子表格)的自定义脚本感到困惑。

我从https://developers.google.com/apps-script/articles/sending_emails#section-2-improvements 复制了课程(请参阅“第 2 节:改进”),但它不起作用:脚本会再次重新发送所有电子邮件,即使单元格已经包含“EMAIL_SENT”(我使用“NOTIFICATION_SENT”代替这个)。

这里是自定义脚本的来源:

var NOTIFICATION_SENT = "NOTIFICATION_SENT";

function NotifyNewBooking() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 47;   // Number of rows to process
  // Fetch the range of cells A2:N48
  var dataRange = sheet.getRange(startRow, 1, numRows, 17)
  // 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 = "natalya@berdyanskaya56.ru";
    var subject = "Строка № " + row + ": " + "новое бронирование";
    var message = "Уведомление о новом бронировании!" + "\n" + "\nДанные нового бронирования:" + "\n" + "\nЗаезд: " + row[0] + "\nВыезд: " + row[1] + "\nНомер: " + "«" + row[2] + "»" + "\nТип размещения: " + row[3] + "\nЦена за ночь: " + row[4] + " руб." + "\nВнесённый депозит: " + row[8] + " руб." + "\n" + "\nИмя и фамилия гостя: " + row[5] + "\nМобильный телефон: " + row[6] + "\nЭлектронная почта: " + row[7] + "\n" + "\nПримечание: " + row[11] + "\n" + "\n* Просмотреть список всех бронирований можно тут: " + "www.bitly.com/b56guests";  
    var notificationSent = row[17];     // The column where notification status is put
    if (notificationSent != NOTIFICATION_SENT) {  // Prevents sending duplicates
      MailApp.sendEmail(emailAddress, subject, message, {name: "Мини-гостиница Бердянская 56", replyTo: "ruslan@berdyanskaya56.ru"});
      sheet.getRange(startRow + i, 17).setValue(NOTIFICATION_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

这里的目标是仅当列row[17] 中的单元格不包含NOTIFICATION_SENT 时才发送电子邮件。请为我提供强有力的建议如何解决它。

非常感谢您!

【问题讨论】:

  • 更新了描述。

标签: google-apps-script google-apps


【解决方案1】:

问题出在这一行:var notificationSent = row[17];

尝试通过记录值Logger.log(row[17])Logger.log(row[16]) 来调试代码,您将在第[17] 行中获得undefined,在第[16] 行中获得NOTIFICATION_SENT

为什么?因为 Range.getValues 返回一个二维数组,数组索引从 0 开始。

documentation中也指定了。

请记住,虽然范围索引从 1、1 开始,但 JavaScript 数组将从 [0][0] 开始索引。

所以 while 行很好,因为您在 for 循环中已将 i 初始化为 0

for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    ....

获取一列时应从索引中减去 1。

var notificationSent = row[17 - 1];

因为如果你有 17 列,数组中的第一个值将从索引 0 开始直到 16。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多