SetActiveSheet()在编辑器中工作,但不会在时间驱动的触发器上工作

时间:2015-05-21 16:55:36

标签: google-apps-script google-sheets

我无法一天几次从同一工作表中更改两张纸之间的活动工作表。

当我手动运行时,我的代码在脚本编辑器中工作正常,但是当设置为时间驱动的触发器时,它根本不会运行。我从拥有工作表的帐户运行它,并通过"当前项目的触发器设置触发器。" 我找不到任何具体原因,为什么它不会在时间驱动的触发器上运行

我想要运行的代码如下 -



// 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]);
}




提前谢谢

2 个答案:

答案 0 :(得分:0)

我认为时间触发器在getActiveSpreadsheet时无法正常工作,因为没有"有效"片。如果您使用openById获得电子表格并传递电子表格的唯一ID,则该工作正常。

答案 1 :(得分: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 =共享