javascript - 如何在谷歌表格中获取更新的单元格值
问题描述
如果我在 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);
}
}
解决方案
您可以存储uptime_zahl
在脚本属性中并在时间驱动的触发器(例如每 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);
}
要设置时间驱动的触发器:
推荐阅读
- python - pandas.read_sql_query - 如果列名和搜索值都包含空格,如何正确编写 WHERE 条件
- react-native - Hermes 设置 [react-native": 0.61.5] / libhermes-executor-debug
- wso2 - WSO2IS 5.8 - 如何无误地清理验证码
- flutter - 来自原生 android 的 Channel Invokemethod 不调用颤振方法
- reactjs - ReactJS/Typescript:子项的类型和属性
- json - Sharepoint List - 使用查找值创建项目
- javascript - 有没有办法观察 vuex 模块中状态或吸气剂的变化?
- asp.net - ASP.Net Core Web API 在 AWS 中通过 Cognito 用户池添加授权后返回 HTTP 504(网关超时)
- list - Dart - 带有嵌套列表的 GroupBy
- r - 删除 R 中仅出现一次且 IDF 较低的单词