1

給与計算用の Google スプレッドシートがあり、スクリプトを隔週で実行する必要があります。現在、手動で実行しています。時間駆動型のトリガーを使用したいのですが、隔週木曜日の午前 1 時に実行される組み合わせがわかりません。これを行う方法を知っている人はいますか?

4

5 に答える 5

3

日付オブジェクトを拡張して週番号をプロトタイプ化し、偶数週 (または明らかに奇数) にのみ呼び出すことを選択できます。

Date.prototype.getWeekNumber = function() {
  var firstDay = new Date(this.getFullYear(),0,1);
  return Math.ceil((((this - firstDay) / 86400000) + firstDay.getDay()+1)/7);
}

そして、毎週木曜日のトリガーで、すべてを条件付きのようにラップします

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

しかし、私は Phil Bozak のオン/オフフラグのアプローチが好きだと思います

于 2013-02-19T11:25:29.617 に答える
2

スクリプトプロパティを使用して、スクリプトに関するプロパティを保存できます。

次の関数を毎週実行するように設定します

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

正しく設定されるように、「runThisWeek」プロパティを初期化する必要があります。

于 2013-02-19T07:17:24.507 に答える
1

これを試して:

// 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(); 
}
于 2013-02-19T10:56:14.143 に答える