2013-02-19 58 views
1

我有一個Google工作表電子表格,需要每隔一週運行一次腳本。現在,我正在手動運行它。我想用時間驅動的觸發器,但我無法弄清楚星期四凌晨1點會做什麼的任何組合。任何人都知道這可能會完成的方式?每隔一週運行一次Google腳本

回答

1

您可以使用腳本屬性保存有關腳本的屬性。

設定下面的功能,以每週運行

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

你必須初始化「runThisWeek」屬性,使之正確設置。

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(); 
} 
+0

+1優秀的,我刪除我的答案... – 2013-02-19 11:29:37

+0

但是,那麼你必須處理夏令時,以及由於觸發器不是立即創建的事實而增加的小偏移量。最終,它不會在凌晨1點運行。我更喜歡原型版本。 – Fred 2013-02-19 16:31:39

2

你可以原型延長日期對象給你一個星期數,然後選擇呼叫只在偶數週(或奇數明顯)

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 
} 

但是我t hink我喜歡Phil Bozak的開/關標誌方法

0
function createBiWeeklyTrigger() { 
    // Trigger every other Monday at 06:00. 
    ScriptApp.newTrigger('function_name') 
     .timeBased() 
     .everyWeeks(2) 
     .onWeekDay(ScriptApp.WeekDay.MONDAY) 
     .atHour(6) 
     .create(); 
} 
0

ScriptProperties庫現在已經過時。 PropertiesService Documentation幫助我找出了下面的解決方案。

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。我試圖通過使用大寫的第一個字母來明確布爾和布爾表達式之間的區別。

您可以通過運行後檢查日誌來對其進行測試。

相關問題