首页 > 解决方案 > Google Apps 脚本:比较两列并在范围的任何行中条件匹配时执行某些操作

问题描述

我对脚本/编程这件事完全陌生,所以如果我在下面做了一些非常愚蠢的事情,我很抱歉

场景:

在“D”列中,我使用 =GOOGLEFINANCE(B2;"PRICE") 从 Google 提取股票价格 在“K”列中,我设置了一个值,我正在等待论文达到

实片图像

我写了(或者至少我做了)一个脚本(粘贴在下面),当“D”<“K”时向我发送一封电子邮件。实际上它正在工作,但仅适用于第一行。触发器已正确配置并正常工作,因为在第一行符合上述条件时,我会收到一封电子邮件。

我需要的:

读取“D”列并将其与“K”列逐行进行比较的脚本。如果“D”<“K”每次出现都给我发一封电子邮件。最好使用主题中的论文名称,该名称存储在“B”列中 类似:“Alert!Paper TAEE3 reched the value”

function PaperValue() {
  var valorAlertaRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Situação").getRange("K2:K16"); 
  var valorAlerta = valorAlertaRange.getValue();
  var valorAtualRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Situação").getRange("D2:D16"); 
  var valorAtual = valorAtualRange.getValue();
  if (valorAtual <= valorAlerta){
    var subject = 'VALOR DO ALERTA ATINGIDO!';
    var message = 'O valor da ação atingiu o preço definido no alerta;  
    MailApp.sendEmail("xxx@live.com", subject, message);
  }
}

感谢您的时间!

标签: google-apps-scriptgoogle-sheets

解决方案


尝试这个:

function PaperValue() {
  var krg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Situação").getRange("K2:K16");
  var kvs = krg.getValues();
  var drg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Situação").getRange("D2:D16");
  var dvs = drg.getValues();
  var subject = 'VALOR DO ALERTA ATINGIDO!';
  var message = 'O valor da ação atingiu o preço definido no alerta';
  kvs.forEach((k, i) => {
    if (dvs[i][0] <= k[0] && MailApp.getRemainingDailyQuota() > 0) {
      MailApp.sendEmail("xxx@live.com", subject, message);
    }
  });
}

解释:

getValue()返回范围内的单个(左上角)单元格。因此,它仅适用于第一行。使用getValues()并进行迭代。


推荐阅读