2015-05-21 32 views
0

我在製作函數時每天都要在同一張工作表的兩張表之間更改活動工作表時遇到問題。SetActiveSheet()在編輯器中工作,但不會在時間驅動的觸發器上工作

當我手動運行它時,我的代碼在腳本編輯器中正常工作,但當設置爲時間驅動觸發器時,它根本無法運行。我從擁有工作表的帳戶運行它,並通過「當前項目的觸發器」設置觸發器。 我無法找到任何具體原因它不會在時間驅動的觸發運行

我想運行的代碼如下 -

// This function cycles the dashboards 
 
function getCycled() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sheetName = SpreadsheetApp.getActiveSheet().getName(); 
 
    // ifs to make this cycle only if already displaying a DB 
 
    // If DB 2.0 
 
    if (sheetName == "Dashboard 2.0") { 
 
     // change to Q/S 
 
     ss.setActiveSheet(ss.getSheetByName("Quality/Safety")); 
 
    } 
 
    // If Q/S 
 
    if (sheetName == "Quality/Safety") { 
 
     // change to DB 2.0 
 
     ss.setActiveSheet(ss.getSheetByName("Dashboard 2.0")); 
 
    } 
 
}

我已經甚至試圖進一步簡化代碼以做出基本改變。再一次,它在編輯器中運行得很好,但仍不會在時間驅動的觸發器上運行。這是我的代碼的問題,還是我不理解有關可安裝/時間驅動的觸發器?

function getCycledB() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    ss.setActiveSheet(ss.getSheets()[0]); 
 
}

預先感謝您

+0

所以你會希望它是否有很多人在觸發時間,或者根本就沒有在紙張上的工作情況? (所以你明白爲什麼只有當特定的用戶從一個特定的瀏覽器實例運行它時,該函數纔有意義) –

回答

0

我相信時間觸發器不會getActiveSpreadsheet很好地工作,因爲沒有「主動」表。如果您獲得電子表格openById並傳遞電子表格的唯一ID,它應該可以正常工作。

0

下面的代碼使用其ID獲取電子表格並將其放入變量ss中。

電子表格在客戶端沒有物理打開。 它僅在服務器上打開(因此腳本可以訪問它)。

var ss = SpreadsheetApp.openById("GOOGLEID"); 

您將收到電子表格的唯一ID。 如果您通過運行此代碼並將結果保存在日誌中來查找工作表ID,則可以找到該ID。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheets()[0]; 

Logger.log(sheet.getSheetId()); 

該ID應該看起來像粗體信息。 https://docs.google.com/a/yourdomain.com/spreadsheets/d/1p8FzOBwGELiKyjnhwoWqfG2l8mt1o889Ln5RKtUsng /編輯?USP =共享

相關問題