Запустить оповещение по электронной почте в зависимости от состояния последней строки НЕ РАБОТАЕТ - PullRequest
0 голосов
/ 10 января 2019

Я попытался создать скрипт, но есть некоторые проблемы. Формат таблицы состоит из 2 столбцов, которые представляют собой дату и значения. Это потребности:

ИДЕАЛЬНОЕ СОСТОЯНИЕ

  1. Возьмите последнюю заполненную строку (сегодняшнюю дату) в Google Sheets под названием "test".
  2. Отметьте в этой строке, если значение в столбце F больше 0,5.
  3. Если оно больше 0,5, вызвать электронное письмо.
  4. В теле письма должно быть указано «Результаты найдены [дата]».

Это была моя отправная точка, но она не дает того, что я хочу. Вот эти вопросы:

СОВРЕМЕННОЕ СОСТОЯНИЕ

1. Скрипт захватывает каждую строку, в которой столбец F был больше 0,5 в прошлом. Я только хочу проверить на сегодня (который будет последним рядом). Не стоит просматривать все в прошлом.

2. В теле письма указано: «Результат найден в [номер строки]». Это не имеет смысла. Я хочу показать дату, а не номер строки.

Это текущий код. Пожалуйста, помогите.

function readCell() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("test");  
    var values = sheet.getRange("F3:F").getValues(); //this has the values
    var date = sheet.getRange("D3:D").getValues(); // this has the date

    var results = [];


    for(var i=0;i<values.length;i++){

      if(values[i]>=0.5)
      {
        results.push("Result found on:" +(i+3));  
      }

    }
    MailApp.sendEmail('blabla@gmail.com', 'Alert',     results.join("\n"));
};

Последней строкой в ​​этом контексте является строка 217, а не 218, при условии, что sheet.getLastRow () будет игнорировать # DIV / o! ценности. Смотрите скриншот для этого.

ПОСЛЕДНИЕ ОБНОВЛЕНИЯ
Текущая ошибка связана с "toDateString". Я думаю, это может быть связано с тем, что мой Google Sheet отстал на один день. Итак, сегодня 10 января, последняя строка в моем Google Sheet - 9 января. Я думаю, именно поэтому ошибка происходит. Можешь подтвердить? В таком случае, как я могу изменить его на сегодня-1 день?

См. Ниже.

1 Ответ

0 голосов
/ 10 января 2019

Вот как вы можете проверить последний ряд:

function readCell() {

    var sheet = SpreadsheetApp.getActive().getSheetByName('test');
    var lastRow = sheet.getLastRow();
    var value = sheet.getRange('F' + lastRow).getValue();
    var date = sheet.getRange('D' + lastRow).getValue();

    if (value >= 0.5) {
      var result = 'Result found on: ' + date;
      MailApp.sendEmail('blabla@gmail.com', 'Alert', result);
    }
};

После просмотра ваших данных, я думаю, что код ниже подойдет вам лучше.

function readCell() {

    var sheet = SpreadsheetApp.getActive().getSheetByName('test');
    var dates = sheet.getRange('D1:D').getValues();

    var date = null;
    var dateRow = 0;
    var dateCount = dates.length;
    var yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1);
    var yesterdayString = yesterday.toDateString();

    for (dateRow; dateRow < dateCount; ++dateCount) {

        date = dates[dateRow];

        if (date instanceof Date) {
            date = date.toDateString();

            if (date === yesterdayString) {
                ++dateRow;
                // To account for zero-based array
                break;
            }
        }
    }

    var value = sheet.getRange('F' + dateRow).getValue();

    if (value >= 0.5) {
      var result = 'Result found on: ' + date;
      MailApp.sendEmail('blabla@gmail.com', 'Alert', result);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...