无法通过独立脚本(Google Apps脚本)激活工作表

时间:2019-05-04 11:40:40

标签: google-apps-script google-sheets google-apps-script-editor

为了保护代码(使人们看不到),我从独立脚本管理电子表格。

除了激活工作表或单元格以外,所有功能都起作用(这些函数与绑定脚本一起使用,计算正确,单元格被激活)。

我尝试通过独立脚本激活工作表,然后将其添加为库并从文件的绑定脚本中调用。没有效果。

我需要在打开电子表格时激活工作表和单元格。

这是我的代码(绑定到电子表格):

function onOpen() {      
    RandomNetwork.goToLastBlock()
}

这是库中的代码(独立脚本):

//goes to the last block on the sheet
function goToLastBlock() {  

    var file = SpreadsheetApp.openById("1kTOcxVv7RgIvp-BVvbZyBbeE92HiAKm8hbFURh19Enc")

    var sheets = file.getSheets()

    for (var i in sheets) {

        var sheetID = sheets[i].getSheetId()

        if (sheetID === 908402362) {

            var lr = sheets[i].getLastRow()
            var cell = sheets[i].getRange(lr, 1)

            sheets[i].activate()
            sheets[i].setCurrentCell(cell)

            return
        }
    }
  }

当我从绑定脚本运行它时,它将找到此电子表格和工作表,并正确计算出最后一行。但是当我从脚本运行时,它什么也没做。

如何从独立脚本激活工作表和单元格?我将不胜感激。

2 个答案:

答案 0 :(得分:0)

您不能通过独立脚本激活工作表和单元格。

仅容器绑定脚本可以使工作表和范围处于活动状态。 container-bound description中没有明确提及您正在使用的特定方法,但这是事实。

图书馆具有更细微的作用域,您可以阅读有关here的更多信息。如表中所示(在链接中),库可以访问容器。本质上,因为您的容器绑定脚本使用该库,所以将独立脚本(如果您愿意)复制到了容器绑定脚本中,因此可以访问那些特权方法。

答案 1 :(得分:0)

每次更改库中的代码时,都需要发布新版本,并且还必须在库的绑定脚本中更改版本号。

作为测试,我将以下代码放在一个独立的脚本中:

//goes to the last block on the sheet
function goToLastBlock() {  

    var file = SpreadsheetApp.getActive();

    var sheets = file.getSheets()
    var theSheet = sheets[0];

    var lr = theSheet.getLastRow()
    var cell = theSheet.getRange(lr, 1)

    theSheet.activate()
    theSheet.setCurrentCell(cell)

    return theSheet.getSheetName();
}

然后,从绑定到工作表的脚本中,我将库(独立)添加到绑定脚本中,并运行绑定脚本中的代码:

function onOpen() {      
    RandomNetwork.goToLastBlock()
}

代码激活了最后一行中的列A单元格。

我将该库作为Web App发布,以“用户访问Web App”和“组织内的任何人”的身份执行。

它对我有用,提供了示例代码并按照说明进行设置。