1

我试图构建一个脚本,但有一些问题。表格格式为 2 列,即日期和值。这些是需求:

理想状态

  1. 抓取 Google 表格中名为“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 表格落后一天有关。所以,今天是 1 月 10 日,我的 Google 表格中的最后一行是 1 月 9 日。我认为这就是错误发生的原因。你确定吗?在那种情况下,我如何将其更改为今天 - 1 天?

见下文。

4

1 回答 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('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);
    }
};
于 2019-01-10T06:04:20.213 回答