google-apps-script - 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);
}
}
感谢您的时间!
解决方案
尝试这个:
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()并进行迭代。
推荐阅读
- javascript - 澳元货币格式
- arduino - 通过 USB 连接的 Arduino 可以激活 2 个电机,但通过 VIN 不会
- vim - 在 MacVim 和 gVim 中默认扩展了配色方案菜单
- angular - 变量在 {} 中声明,但给出错误
- macos - 为什么 Unity 不断启动另一个停止的进程?
- python - 从 Go 和 Python 调用共享库函数
- python - getter 方法中的验证
- php - Laravel 图像未在浏览器中下载
- mongodb - 如何更改 Compose Transporter 的 MongoDB Adapter 的 Max Bulk Ops?
- android - 甚至一个空的布局文件也向我展示了 android 中的膨胀异常