【问题标题】:How to get an updated cell value in google sheets如何在谷歌表格中获取更新的单元格值
【发布时间】:2019-10-01 08:32:01
【问题描述】:

如果我在 python 中的脚本不再运行,我想给自己发送一封电子邮件。

我在 python 中实现了一个正常运行时间功能。单元格 E5 每 15 秒更新一次新的正常运行时间。如果正常运行时间没有改变我的脚本不再运行,我想通过电子邮件得到通知。出于这个原因,我在 5 分钟后比较单元格值。

但 uptime_zahl 和 uptime_new_zahl 在我启动我的应用程序脚本函数时始终等于值。

如何获取更新后的单元格值??

function uptimeCheck() {
var ss = SpreadsheetApp.openById("XXX");
var sheet = ss.getSheetByName('Tabellenblatt1');
var uptime_string = sheet.getRange("E5").getValue().toString();
var uptime_zahl = Number(uptime_string.replace(',', "."));
Utilities.sleep(300000);//wait for 5 minutes

var uptime_new_string = sheet.getRange("E5").getValue().toString();
var uptime_new_zahl = Number(uptime_new_string.replace(',', "."));  
  if (uptime_zahl == uptime_new_zahl)
  {
    var emailAddress = 'XXX';
    var subject = 'The bot does not run';
    var message = 'old time: '+uptime_zahl+'new time: '+uptime_new_zahl;
    MailApp.sendEmail(emailAddress, subject,message);
  }  
}

【问题讨论】:

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


    【解决方案1】:

    您可以将uptime_zahl 存储在Script properties 中并在time-driven trigger 上运行您的自动脚本(例如每5 分钟一次)。

    以下示例

    • 在第一次运行期间将脚本属性“uptime_zahl”设置为“E5”中的实际值,并将sent 状态设置为0
    • 将“E5”中的当前值与上次脚本运行期间存储的值进行比较
    • 如果值仍然相同且尚未发送电子邮件,则发送电子邮件
    • 将脚本属性设置为当前值,并将sent 设置为1,如果当前值的电子邮件已经发送
    function uptimeCheck() {
    
    var ss = SpreadsheetApp.openById('XXX');
    var sheet = ss.getSheetByName('Tabellenblatt1');
    var uptime_string = sheet.getRange("E5").getValue().toString();
    var uptime_new_zahl = Number(uptime_string.replace(',', "."));
    
    if(PropertiesService.getScriptProperties().getKeys().length==0){ // first time you run the script
      PropertiesService.getScriptProperties().setProperty('uptime_zahl',uptime_new_zahl);
      PropertiesService.getScriptProperties().setProperty('sent',0);
    }
    var sent=parseInt(PropertiesService.getScriptProperties().getProperty('sent'));  
    var uptime_zahl = PropertiesService.getScriptProperties().getProperty('uptime_zahl');
    if (uptime_zahl == uptime_new_zahl&&sent==0)
      {
        Logger.log('still the same, email sent: '+uptime_zahl);
        var emailAddress = 'XXX';
        var subject = 'The bot does not run';
        var message = 'old time: '+uptime_zahl+'new time: '+uptime_new_zahl;
        MailApp.sendEmail(emailAddress, subject,message);
        sent=1;
      }else if(uptime_zahl != uptime_new_zahl){
        sent=0;
        Logger.log('value changed');
      }else{
        Logger.log('value did not change, but email has been sent already');
      }               
    PropertiesService.getScriptProperties().setProperty('uptime_zahl',uptime_new_zahl);  
    PropertiesService.getScriptProperties().setProperty('sent',sent);  
    }
    

    要设置时间驱动的触发器:

    【讨论】:

    • 谢谢 :) 那行得通。但是,如果正常运行时间不再改变,我每五分钟就会收到一封电子邮件。是否可以只收到一封电子邮件?
    • 我明白了,您能确认一下您想要的工作流程是什么吗?如果值 A 超过 5 分钟没有变化,您想收到一封电子邮件。如果在稍后的时间点 A 值变为 B 值,但在 5 分钟内再次没有变化 - 您想再次收到电子邮件吗?
    • 是的,就是这样!
    • 谢谢:) 你能解释一下或发送一个来源,我可以在哪里找到什么 PropertiesService?你知道了解 google-apps 脚本和 JS 的好资源吗?
    • 我的答案中的链接将向您介绍该方法的官方 Google Apps 脚本文档。 GAS和JS的一般介绍:developers.google.com/apps-scriptdevelopers.google.com/apps-script/quickstart/custom-functionsdeveloper.mozilla.org/en-US/docs/Web/JavaScript
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多