Google apps script 每隔一周运行一次谷歌脚本

Google apps script 每隔一周运行一次谷歌脚本,google-apps-script,Google Apps Script,我有一个谷歌工资电子表格,还有一个脚本,需要每隔一周运行一次。现在,我正在手动运行它。我想使用时间驱动触发器,但我想不出每隔一个星期四凌晨1点可以使用的组合。有人知道这样做的方法吗?您可以使用脚本属性保存有关脚本的属性 将以下函数设置为每周运行 function runEveryWeek() { var runThisWeek = ScriptProperties.getProperty("runThisWeek"); if (runThisWeek) { //do your t

我有一个谷歌工资电子表格,还有一个脚本,需要每隔一周运行一次。现在,我正在手动运行它。我想使用时间驱动触发器,但我想不出每隔一个星期四凌晨1点可以使用的组合。有人知道这样做的方法吗?

您可以使用脚本属性保存有关脚本的属性

将以下函数设置为每周运行

function runEveryWeek() {
  var runThisWeek = ScriptProperties.getProperty("runThisWeek");
  if (runThisWeek) {
    //do your task here
    ScriptProperties.setProperty("runThisWeek",false);
  } else {
    ScriptProperties.setProperty("runThisWeek",true);
  }
}

您必须初始化“runThisWeek”属性,以便正确设置它

您可以使用脚本属性保存有关脚本的属性

将以下函数设置为每周运行

function runEveryWeek() {
  var runThisWeek = ScriptProperties.getProperty("runThisWeek");
  if (runThisWeek) {
    //do your task here
    ScriptProperties.setProperty("runThisWeek",false);
  } else {
    ScriptProperties.setProperty("runThisWeek",true);
  }
}
您必须初始化“runThisWeek”属性,以便正确设置它

试试这个:

// The init() function runs once to set up the initial trigger.

function init() {
   ScriptApp.newTrigger("ThursdayTrigger")
    .timeBased()
    .atDate(2013, 3, 21) // Setup the first trigger on a specific date
    .create();
}

function ThursdayTrigger() {

  // 1. write the function code here

  // 2. delete the existing ThursdayTrigger

  var triggers = ScriptApp.getScriptTriggers();
  for (var i = 0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == "ThursdayTrigger") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }

  // 3. setup another trigger in the same function that triggers after 14 days.

  ScriptApp.newTrigger("ThursdayTrigger")
    .timeBased()
    .after(1000*60*60*24*14) // Alternate Thursday
    .create(); 
}
//init()函数运行一次以设置初始触发器。
函数init(){
ScriptApp.newTrigger(“周四Trigger”)
.基于时间的()
.atDate(2013,3,21)//在特定日期设置第一个触发器
.create();
}
函数ThursdayTrigger(){
//1.在此处编写函数代码
//2.删除现有的星期四触发器
var triggers=ScriptApp.getScriptTriggers();
对于(var i=0;i
试试这个:

// The init() function runs once to set up the initial trigger.

function init() {
   ScriptApp.newTrigger("ThursdayTrigger")
    .timeBased()
    .atDate(2013, 3, 21) // Setup the first trigger on a specific date
    .create();
}

function ThursdayTrigger() {

  // 1. write the function code here

  // 2. delete the existing ThursdayTrigger

  var triggers = ScriptApp.getScriptTriggers();
  for (var i = 0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == "ThursdayTrigger") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }

  // 3. setup another trigger in the same function that triggers after 14 days.

  ScriptApp.newTrigger("ThursdayTrigger")
    .timeBased()
    .after(1000*60*60*24*14) // Alternate Thursday
    .create(); 
}
//init()函数运行一次以设置初始触发器。
函数init(){
ScriptApp.newTrigger(“周四Trigger”)
.基于时间的()
.atDate(2013,3,21)//在特定日期设置第一个触发器
.create();
}
函数ThursdayTrigger(){
//1.在此处编写函数代码
//2.删除现有的星期四触发器
var triggers=ScriptApp.getScriptTriggers();
对于(var i=0;i
您可以扩展date对象的原型,给您一个星期号码,然后选择仅在偶数周(或奇数周)调用

然后在你的每周星期四触发器上,用一个有条件的

if (today.weekNumber() % 2 === 0) {
  // triggered function here
}

但是我想我喜欢Phil Bozak的开/关旗方法

你可以扩展date对象的原型,给你一个周数,然后选择只在偶数周(或者显然是奇数周)调用

function createBiWeeklyTrigger() {
  // Trigger every other Monday at 06:00.
  ScriptApp.newTrigger('function_name')
      .timeBased()
      .everyWeeks(2)
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(6)
      .create();
}
然后在你的每周星期四触发器上,用一个有条件的

if (today.weekNumber() % 2 === 0) {
  // triggered function here
}

但是我想我喜欢Phil Bozak的开/关标志方法,ScriptProperties库现在被贬低了。这个问题帮助我找到了下面的解决方案

function createBiWeeklyTrigger() {
  // Trigger every other Monday at 06:00.
  ScriptApp.newTrigger('function_name')
      .timeBased()
      .everyWeeks(2)
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(6)
      .create();
}
function runEveryWeek() {
  var scriptProps = PropertiesService.getScriptProperties();
  if(scriptProps.getProperty('runThisWeek') == "True"){
    //do your task here
    Logger.log("tast executes");
    scriptProps.setProperty("runThisWeek", 'False');
  } else {
    Logger.log("task does not execute");
    scriptProps.setProperty("runThisWeek", 'True');
  }
}
我最初尝试将值设置为布尔值,但这导致了一个问题,因为方法
.getProperty()
具有返回类型
string
。我试图通过使用大写字母来明确区分布尔值和表示为字符串的布尔值


您可以在运行它之后通过检查日志来测试它。

ScriptProperties库现在已折旧。这个问题帮助我找到了下面的解决方案

function runEveryWeek() {
  var scriptProps = PropertiesService.getScriptProperties();
  if(scriptProps.getProperty('runThisWeek') == "True"){
    //do your task here
    Logger.log("tast executes");
    scriptProps.setProperty("runThisWeek", 'False');
  } else {
    Logger.log("task does not execute");
    scriptProps.setProperty("runThisWeek", 'True');
  }
}
我最初尝试将值设置为布尔值,但这导致了一个问题,因为方法
.getProperty()
具有返回类型
string
。我试图通过使用大写字母来明确区分布尔值和表示为字符串的布尔值


您可以在运行日志后通过检查日志来测试它。

但是您必须处理夏时制,以及由于触发器不是立即创建的事实而增加的小偏移量。最终,它将不再在凌晨1点运行。我更喜欢原型机版本。但是你必须处理夏令时,以及由于触发器不是立即创建的事实而增加的小偏移量。最终,它将不再在凌晨1点运行。我更喜欢原型版本。