【发布时间】:2018-10-03 16:50:40
【问题描述】:
我正在使用不同的 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,但从子工作表执行脚本总是产生库工作表的属性范围。
是否有可能避免将所有本地函数重新映射到库函数以传递一些特定于工作表的变量?非常感谢。
【问题讨论】:
-
不幸的是,调用库函数似乎使用库脚本/文档的属性范围,而不是子属性。我刚刚尝试过,DocumentProperties 总是引用库脚本/文档,而不是使用调用子脚本。
-
stackoverflow.com/questions/22818320/… 可能会有所帮助。或者,使用
fileId的键和适当的配置信息设置UserProperties -
感谢您的建议!恐怕多个用户也在使用这些脚本。到目前为止,最简单的解决方案似乎是将值直接存储在子表中并通过
getRange().getValues()检索它们,因为这种方法总是引用调用表。它既不优雅也不快速,但似乎有效。但是,也许还有另一种方法。
标签: google-apps-script google-sheets