这是我写的一个非常简单的程序:
function () {
var app = SpreadsheetApp ;
var tableur = app.getActiveSpreadsheet() ;
var feuille = tableur.getActiveSheet();
var now = new Date();
Utilities.sleep(900000)
feuille.getRange("A1000").setValue(now);
feuille.getRange("B1000:O1000").setValue("1000000");
feuille.getRange("P1000").setValue("Prudent");
feuille.getRange("Q1000").setValue("10");
feuille.getRange("R1000").setValue("10");
feuille.getRange("S1000").setValue("NON");
}
但是,我希望代码在继续之前等待15分钟。谷歌有5分钟的限制,这就是为什么我读了很多关于这个问题,但我找不到任何解决方案。我实际上使用了Utilities.sleep (900000)
但它不起作用。
我呼吁你的善意向像我这样的初学者解释如果可能的话,如何绕过限制! :)
function onEdit(e) {
var triggerTime = new Date();
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty("lastTrigger", triggerTime);
}
function doSomething() {
var scriptProperties = PropertiesService.getScriptProperties();
var lastTrigger = new Date(scriptProperties.getProperty("lastTrigger"));
var lastTriggerUnix = lastTrigger.getTime() / 1000; // using unix time for a more straightforward time comparison
var nowUnix = (new Date()).getTime() / 1000;
var FIFTEEN_MINUTES = 15 * 60;
if ((nowUnix - lastTriggerUnix) >= FIFTEEN_MINUTES) {
scriptProperties.deleteProperty("lastTrigger");
var app = SpreadsheetApp ;
var tableur = app.getActiveSpreadsheet() ;
var feuille = tableur.getSheetByName("Réponses"); // getActiveSheet() can yield unexpected results
var app = SpreadsheetApp ;
var now = new Date()
feuille.getRange("A10").setValue(now);
feuille.getRange("B10:O10").setValue("1000000");
feuille.getRange("P10").setValue("Prudent");
feuille.getRange("Q10").setValue("10");
feuille.getRange("R10").setValue("10");
feuille.getRange("S10").setValue("NON");
}
}
我忘记了吗?
答案 0 :(得分:1)
鉴于您希望{E-1}}脚本在电子表格上次编辑后大约15分钟运行的新信息,这是我的修改,但使用相同的一般原则。
创建一个doSomething()
简单触发器,将编辑时间保存到属性服务(这可以通过简单地包含onEdit()
函数来完成,Google interprets automatically)。另外,创建一个手动触发器,每隔5分钟左右运行一次onEdit
功能。当该功能运行时,如果上次编辑和现在之间的差异大于或等于您想要的长度,它将检查上次编辑时间并执行您想要的操作。
doSomething()
您应该使用Properties Service保存function onEdit(e) {
var triggerTime = new Date();
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty("lastTrigger", triggerTime);
}
function doSomething() {
var scriptProperties = PropertiesService.getScriptProperties();
var lastTrigger = new Date(scriptProperties.getProperty("lastTrigger"));
var lastTriggerUnix = lastTrigger.getTime() / 1000; // using unix time for a more straightforward time comparison
var nowUnix = (new Date()).getTime() / 1000;
var FIFTEEN_MINUTES = 15 * 60;
if ((nowUnix - lastTriggerUnix) >= FIFTEEN_MINUTES) {
scriptProperties.deleteProperty("lastTrigger");
// Do what you need to do here
}
}
,然后使用Trigger每15分钟运行一次脚本。 (第一次运行时,时间可能稍微偏离。)
now
如trigger documentation所述,您可以从“编辑”菜单>创建触发器。当前项目的触发器。
我在5分钟的间隔内对此进行了测试,并收到了以下输出。当我第一次手动运行该函数时,其时间值与后续迭代不一致。
function doSomething() {
var app = SpreadsheetApp ;
var tableur = app.getActiveSpreadsheet() ;
var feuille = tableur.getSheetByName("Sheet2"); // getActiveSheet() can yield unexpected results
var scriptProperties = PropertiesService.getScriptProperties();
var storedNow = scriptProperties.getProperty("now") || new Date(); // Get the stored time. If it doesn't exist, create a new one.
var now = new Date(storedNow); // The value is stored as a String in the Properties Service, so convert to Date.
feuille.getRange("A10").setValue(now);
feuille.getRange("B10:O10").setValue("1000000");
feuille.getRange("P10").setValue("Prudent");
feuille.getRange("Q10").setValue("10");
feuille.getRange("R10").setValue("10");
feuille.getRange("S10").setValue("NON");
now = new Date(); // Create a new date to be used when the function runs again
scriptProperties.setProperty("now", now); // Save the new date
}