Google Sheets AppsScript Отправить электронную почту, если любая из дат в 3 столбцах = сегодня - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь написать код, который будет автоматически запускать электронную почту, если столбец C, D или E (даты) равен сегодняшней дате, я проводил некоторые исследования логических операторов Or для Js, но не работает, я получаю сообщение об ошибке «SyntaxError: Unexpected token», это либо условие на сегодняшний день, либо это связано с тем, что операторы Or (||)?

Обновленный скрипт Теперь это работает нормально, определяя сегодняшнюю дату, используя const currenttime = new Date (), но я получаю электронное письмо для каждой позиции, а не только с текущей датой, какие-либо подсказки?

function sendEmails() {
  const sheet1 = SpreadsheetApp.getActive();
    const sheet = sheet1.getSheetByName('Sheet1');
  const dataRange = sheet.getRange("A1:E1000");
  const data = dataRange.getValues();
  const currenttime = new Date();

  data.forEach(function (rowData) {
    const recipient = rowData[0];
    const emailAddress = rowData[1];
    const Notes = rowData[5];
    const date = rowData[2];
      const date2 = rowData[3];
        const date3 = rowData[4];

    if (date == currenttime || date2 == currenttime || date3 == currenttime) {return}

    const greeting = 'Dear ' + recipient + ',\n'
    const customerMessage = 'Please follow up with ' + Notes + ' By today!';
    const greatJobMessage = 'Thanks';

    const message = [greeting, customerMessage, greatJobMessage].join('\n');
    const subject = 'Reminder to Follow up!';
    MailApp.sendEmail("ecmoranavila@gmail.com", subject, message);
  }) 
}

1 Ответ

0 голосов
/ 13 марта 2020

Есть некоторые проблемы с вашим скриптом, которые необходимо устранить, чтобы он работал.

Прежде всего, ваше условие if ничего не делает. Он имеет пустой возврат (?) И затем закрывается. Код, отправляющий электронное письмо, вышел из условия, поэтому он всегда будет работать.

Во-вторых, объявление Date возвращает строку, подобную этой: Fri Mar 13 12:30:50 GMT+01:00 2020, так что это бесполезно, если даты в вашем листе не будут также указывать часы, минуты и секунды (пропустить одну секунду и электронное письмо не будет отправлено).


Исправления:

  1. Получите данные листа с помощью getDisplayValues ​​() . В противном случае сценарий получит дату в совершенно другом формате, чем лист:

    const data = dataRange.getDisplayValues();

    В моем листе даты выглядят так: 13-03-2020, но вы можете использовать любой другое формат .


Форматировать дату текущего времени. Как я уже говорил, new Date() возвращает длинную строку. Вы можете отформатировать его с помощью класса Utilities , чтобы он совпадал с датами, указанными в листе:

const currenttime = Utilities.formatDate(new Date(), 'UTC', 'dd-MM-yyyy');


Измените условие if, чтобы оно охватывало остальную часть кода. Кроме того, удалите return, поскольку он ничего не делает:
  if (date == currenttime || date2 == currenttime || date3 == currenttime) {

   const greeting = 'Dear ' + recipient + ',\n'
   const customerMessage = 'Please follow up with ' + Notes + ' By today!';
   const greatJobMessage = 'Thanks';

   const message = [greeting, customerMessage, greatJobMessage].join('\n');
   const subject = 'Reminder to Follow up!';
     MailApp.sendEmail("ecmoranavila@gmail.com", subject, message)}
 }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...