Google应用脚本:如何在不同的函数调用之间保存电子表格中的数据?

时间:2011-11-07 16:37:20

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

在使用脚本编辑器的Google电子表格中,我进行函数调用,但我不太确定存储持久数据(我将继续使用的数据)的最佳方法是使用全局变量(使用对象,数组) ,字符串),或者有更好的方法来存储数据。

我不想使用可能是另一种方式的细胞。

另一个问题是,是否可以在此环境中创建(伪)类?最好的方式?

3 个答案:

答案 0 :(得分:9)

不推荐使用ScriptPropertiesScriptDB

相反,您应该使用新的类PropertiesService,它分为三个缩小范围的部分:

  • 文档 - 获取所有用户可以在当前文档中访问的属性存储(如果脚本作为加载项发布)。
  • 脚本 - 获取所有用户都可以访问的属性存储,但只能在此脚本中访问。
  • 用户 - 获取只有当前用户才能访问的属性存储,并且只能在此脚本中访问。

这是一个跨越调用持久保存用户属性的示例:

var properties = PropertiesService.getScriptProperties();

function saveValue(lastDate) {
  properties.setProperty('lastCalled', lastDate);
}

function getValue() {
  return properties.getProperty('lastCalled');
}

脚本执行环境是无状态的,因此您无法从以前的运行中访问本地变量,但您可以将getScriptProperties()存储在本地变量中,因为它将在每次返回服务器时重新运行,因此它可以用这两种方法调用。


如果您需要更临时存储某些内容,可以使用CacheService API

答案 1 :(得分:2)

可以使用Class ScriptProperties存储持久数据:

http://code.google.com/googleapps/appsscript/class_scriptproperties.html

所有值都存储为字符串,并且在检索时必须使用likes或parsInt或parseFloat转换回来。

JSON对象也可以这种方式存储。

答案 2 :(得分:1)

我的经验是,每个检索或存储值的查询都需要时间。至少,我会在安全的时候尽可能地将信息缓存在你的javascript代码中。我的脚本总是一次执行所有,所以我不需要保留全局变量,因为我只是传递检索到的数据数组,操纵它们,最后一次性地存储它们。如果我需要跨脚本调用持久化并且我不关心在网页关闭时删除中间值,那么我将使用全局变量。显然,如果您的脚本在中间停止并且尚未将值存储回Google,则必须考虑会发生什么。