簡體   English   中英

基於時間的Google腳本-每分鍾12:00 am至12:30 am觸發

[英]Time based Google Script - Trigger between 12:00am to 12:30am every minute

我有一個腳本可以將數據從一個Google工作表復制到另一個工作表,代碼是這樣的:

function copy() {
 var sss = SpreadsheetApp.openById('ID'); //replace with source ID
 var ss = sss.getSheetByName('Cap'); //replace with source Sheet tab name
 var range = ss.getRange('A:F'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('ID'); //replace with destination ID
 var ts = tss.getSheetByName('Cap'); //replace with destination Sheet tab name
 ts.getRange(1, 1, data.length, data[0].length).setValues(data);
}

我需要每天凌晨12:00運行此腳本,直到凌晨12:30每分鍾運行一次,我不再需要在當天運行該腳本

我可以設置觸發器,例如白天(在12點至凌晨1點之間運行)或小時時間(每隔一小時),但這不是我所需要的,那不准確,我只需要在12:00 am准確運行,依此類推,如30每分鍾

如果我將觸發器設置為每分鍾運行一次,則會收到“服務占用一天的計算機時間過多”的信息

有沒有辦法在腳本觸發器上進行設置?

謝謝 !

Google對觸發器的使用頻率有一些限制。 您不能為每分鍾設置一堆觸發器,因為每個用戶最多只能設置20個觸發器( 此處更多關於配額的信息 )。 據我所知,這是用於並發觸發器的。 每天重復的觸發器只會每小時隨機觸發一次。

您可能希望嘗試以編程方式創建觸發器。 您將設置一個初始觸發器,該觸發器將在特定的日期和時間觸發腳本。

該腳本將必須具有一個附加功能,該功能將檢查現在幾點,並相應地刪除先前的觸發器,為12:01然后12:02然后12:03創建觸發器,依此類推,直到檢查觸發器是否已創建當時是12:30,那么它創建的下一個觸發條件是第二天的12:00。

這里的關鍵問題是要絕對確定您的腳本執行時間不會超過1分鍾,並且肯定會及時啟動。 您也可以嘗試讓它使用每分鍾重復一次觸發器,但是同樣適用-您的腳本不能運行超過1分鍾,否則您下次啟動時會遇到問題。

至於刪除舊觸發器,您可以輕松地執行以下操作:

function(trig) {
  var triggers;
  var trigCount;

  triggers = ScriptApp.getProjectTriggers();
  for (trigCount = 0; trigCount<triggers.length; trigCount++) {
      if (triggers[trigCount].getUniqueId() == trig.triggerUid) {
        ScriptApp.deleteTrigger(triggers[trigCount]);
        break;
      }
  }
}

這將刪除啟動腳本的任何觸發器。

FYI

我找到了解決方案,如果有人需要相同的解決方案

該代碼是

function CopyLive1() {

  var date = new Date();  
  var day = date.getDay();
  var hrs = date.getHours();
  var min = date.getMinutes();
  if ((hrs >= 0) && (hrs <= 0) && (min >= 0) && (min <= 30 )) {

 var sss = SpreadsheetApp.openById('ID'); //replace with source ID
 var ss = sss.getSheetByName('L1'); //replace with source Sheet tab name
 var range = ss.getRange('A:E'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('ID'); //replace with destination ID
 var ts = tss.getSheetByName('L1'); //replace with destination Sheet tab name
 ts.getRange(1, 1, data.length, data[0].length).setValues(data);

  }

} 

並添加每分鍾觸發,這種方式只會在12:00 am和12:30 am之間每分鍾運行一次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM