在使用 Google Apps 脚本库时访问局部变量



我正在使用不同的Google电子表格,这些电子表格都使用相同的工作表和结构。它们都使用一组相同的函数,这些函数通过使用自定义菜单项执行。

为了仅对所有电子表格维护一次函数,其中一个用作所有其他电子表格的库。现在问题来了:所有电子表格都有一组单独的属性,需要传递给库函数调用。这就是为什么我目前正在做这样的事情:

库中的示例函数可作为lib以及所有工作表的菜单结构提供:

function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Actions')
.addItem("My Library Function", "trackingHelper")
.addItem("My 2nd Library Function", "anotherFunction")
.addToUi();
}
function trackingHelper(sheetProperties) {
do something and use the sheetProperties
}

现在,在"子"表中,我添加了这样的东西:

var sheetProperties = {key: value, ...}
function onOpen() {
lib.onOpen();
}
function trackingHelper() {
lib.trackingHelper(sheetProperties);
}
function anotherFunction() {
lib.anotherFunction(sheetProperties);
}

问题是,如果我添加新函数,我总是需要编辑所有工作表。这就是为什么我想对库电子表格中的菜单做这样的事情:

function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Actions')
.addItem("My Library Function", "lib.trackingHelper")
.addItem("My 2nd Library Function", "lib.anotherFunction")
.addToUi();
}

因此,我只想将此菜单添加一个onOpen添加到所有子工作表中,而无需单独添加所有功能。但是我现在如何通过我的子属性?我尝试使用该PropertiesService但从子工作表执行脚本总是产生库工作表的属性范围。

是否有可能避免将所有本地函数重新映射到库函数以传递一些特定于工作表的变量?多谢。

子工作表中的工作表属性是可变的还是静态的?

如果是静态的,则以子电子表格 ID 作为键将它们存储在属性服务中,然后使用getactivespreadsheet().getID从 lib 文件中提取属性。

比从工作表上读取的获取值快得多,但我不能说我也没有函数帽从电子表格中提取变量。这在当时很容易,而且只是工作。 除非有人编辑格式或意外删除了值或工作表。

编辑:我和你有同样的问题。我仍然需要重新映射子脚本中的所有库函数,但我已经弄清楚了如何管理单个属性,如下所示。

--

在库中,您可以管理每个子项的变量:

PROJECT_NAME1 = {
name: 'abc',
visibleOverride: false
};
PROJECT_NAME2 = {
name: 'xyz',
visibleOverride: true
};

在子脚本中,可以有一个全局变量,如下所示:

PROJECT = lib.PROJECT_NAME1;

在子脚本中,将全局PROJECT变量传递给库函数:

function hideSheet() {
lib.Group.toggleSheetVisibility(PROJECT, false);
}
function showSheet() {
lib.Group.toggleSheetVisibility(PROJECT, true);
}

在库中,您可以访问由原始子脚本自定义的各个设置:

Group = {
toggleSheetVisibility: function (PROJECT, visible) {
var sheet = SpreadsheetApp
.getActive()
.getActiveRange()
.getSheet();
if (!PROJECT.visibleOverride) {
visible
? sheet.showSheet()
: sheet.hideSheet();
}
}
}

最新更新