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

1

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

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

  1. Возьмите последнюю заполненную строку (сегодняшнюю дату) в Google Sheets под названием "тест".
  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('[email protected]', 'Alert',     results.join("\n"));
};

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

Изображение 174551

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

Увидеть ниже.
Изображение 174551

Теги:
google-apps-script
google-apps-script-editor
google-sheets

1 ответ

0

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

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('[email protected]', '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('[email protected]', 'Alert', result);
    }
};
  • 0
    Просто чтобы подтвердить, последняя строка в этом контексте - это строка 217, а не 218, предполагая, что sheet.getLastRow () будет игнорировать # DIV / o! ценности. Смотрите скриншот для этого. Я думаю, что с вашим сценарием, он будет смотреть на строку 218, верно?
  • 0
    Вот документация для getLastRow () .
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню