【问题标题】:Google Scripts - Dates/Spreadsheets/Automatic EmailsGoogle Script - 日期/电子表格/自动电子邮件
【发布时间】:2015-06-24 19:55:52
【问题描述】:

提前致歉 - 我不是程序员。只是想为我的生意拼凑一些东西。目前,我有一个引用电子表格并向我的接待员发送自动电子邮件的脚本。该脚本提供了我想要的所有信息,但问题是它会为每个条目发送一封单独​​的电子邮件。理想情况下,我想向我的接待员发送一封电子邮件,其中包含即将到来的一天的所有约会列表。

我遇到的问题包括:

  • 我需要将多封电子邮件合并为一封电子邮件,其中包含第二天即将到来的约会列表。
  • 我不知道如何选择我需要的行,因为它们是日期值 (DD/MM/YYYY)。因此,我正在寻找一种方法来读取日期,识别它是约会前一天,并将这些条目添加到一个列表中。

如果有人能帮我解决这个问题,将不胜感激!

这是我目前所拥有的:

function receptionist() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 8)
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[2];
    var timeslot = sheet.getRange(i+2,7,1,1).getValues();
    var name = sheet.getRange(i+2,2,1,1).getValues();
    var date = Utilities.formatDate(new Date(sheet.getRange(i+2,6,1,1).getValue()),"EST", "E MMM dd, yyyy");
    var receptionist= name+" scheduled on "+date+" at "+timeslot;
    var subject = "Appt. List";
    var emailAddress = "receptionist@example.com";
    MailApp.sendEmail({emailAddress, subject, receptionist});

提前致谢!

【问题讨论】:

  • 您只想处理两行? var numRows = 2; 或者你有更多的行,需要全部评估? for 循环的终点在哪里?我看不出它在哪里结束。
  • 我正在尝试处理大约 1500 行。 NumRows 设置为 2,这样我就可以在不向自己发送 1500 封单独的电子邮件的情况下进行测试。 for 循环是从我一直在调整的旧代码中提取的。我不确定它在我的情况下有什么用途,所以也许可以删除它,但为了安全起见就挂在上面。

标签: google-apps-script google-sheets gmail


【解决方案1】:

我已经测试了这段代码,它可以工作:

function receptionist() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 8)
  var data = dataRange.getValues();
  var receptionist = "Today's Appointments \r\r";

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[2];
    var timeslot = sheet.getRange(i+2,7,1,1).getValue();
    var name = sheet.getRange(i+2,2,1,1).getValue();
    var dateData = sheet.getRange(i+2,6,1,1).getValue();

    var dayOfAppointment = dateData.getFullYear() + dateData.getMonth() + dateData.getDate();
    var todaysDate = new Date();
    var todaysDayNumber = todaysDate.getFullYear() + todaysDate.getMonth() + todaysDate.getDate();

    if (todaysDayNumber === dayOfAppointment) {
      var date = Utilities.formatDate(new Date(),"EST", "E MMM dd, yyyy");
      var thisAppointment = name+" scheduled on "+date+" at "+timeslot + "\r";

      receptionist+=thisAppointment;
    };
  };

  var subject = "Appt. List";
  var emailAddress = "receptionist@example.com";
  MailApp.sendEmail(emailAddress, subject, receptionist);
};

您确实需要一个for 循环。我从.sendEmail() 参数中删除了花括号。注意 "\r" 值以将每一行换成新行。这一行:

receptionist+=thisAppointment;

在每次迭代中使receptionist 变量变长一个预约行。我没有通过每一行代码来确定代码是否最优。您需要的基础知识就在那里。它可以“按原样”工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多