编程语言
首页 > 编程语言> > javascript-根据最后一行的条件触发电子邮件警报不起作用

javascript-根据最后一行的条件触发电子邮件警报不起作用

作者:互联网

我尝试构建脚本,但是存在一些问题.表格格式是2列,分别是日期和值.这些是需要:

理想状态

>在Google表格中获取最后一个填充行(今天的日期),称为“测试”.
>在该行中检查F列中的值是否大于0.5.
>如果大于0.5,则触发电子邮件.
>在电子邮件正文中,应注明“在[日期]找到结果”.

这是我的出发点,但没有产生我想要的.这些是问题:

当前状态

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"));
};

假设sheet.getLastRow()将忽略#DIV / o,则此上下文中的最后一行是第217行,而不是218行!值.参见截图.

最新更新
当前错误与“ toDateString”相关.我认为我的Google表格可能落后一天.因此,今天是1月10日,我的Google表格中的最后一行是1月9日.我认为这就是错误发生的原因.你确定吗?在这种情况下,如何将其更改为今天1天?

见下文.

解决方法:

这是检查最后一行的方法:

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);
    }
};

标签:javascript,google-sheets,google-apps-script,google-apps-script-editor
来源: https://codeday.me/bug/20191009/1881222.html