首页 > 解决方案 > 如何在谷歌表格中获取更新的单元格值

问题描述

如果我在 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);
  }  
}

标签: javascriptpythongoogle-apps-scriptgoogle-sheets

解决方案


您可以存储uptime_zahl脚本属性中并在时间驱动的触发器(例如每 5 分钟)上自动运行脚本。

以下示例

  • 在第一次运行期间将脚本属性“uptime_zahl”设置为“E5”中的实际值,并将sent状态设置为0
  • 将“E5”中的当前值与上次脚本运行期间存储的值进行比较
  • 如果值仍然相同并且尚未发送电子邮件,则发送电子邮件
  • 将脚本属性设置为当前值sent1如果当前值的电子邮件已经发送,则设置为
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);  
}

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

在此处输入图像描述


推荐阅读