给定行条件,Google Script不会按预期触发

时间:2019-01-11 20:57:00

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

我的表架构中有2列:

D列=日期,即20180611 [yyymmdd]
F列=连续值,即0.1、0.6,-0.3等

这就是我要发生的事情:

在D列中检查昨天的日期。然后,进入相应的行,并检查F列是否大于0.5(代表昨天的日期)。如果为TRUE,则发送电子邮件警报。

这是我拥有的脚本,但是由于某种原因它不会触发。怎么了?

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) {

        try {

            date = dates[dateRow].toDateString();

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

        } catch (error) {
            Logger.log(error);
        }
    }

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

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

这里是数据 enter image description here

1 个答案:

答案 0 :(得分:0)

问题可能是由于使用开放引用D2:D来获取值,然后使用dates.length来设置for循环的迭代次数,因为它可能太大。

一种可以解决上述问题的“快速而肮脏”的方法是替换

var dateCount = dates.length;

作者

var dateCount = sheet.getDataRange().getValues().length;