Google apps脚本:如何在不同的函数调用之间在电子表格中持久化数据

Google apps script: how to persist data in spreadsheet between different function calls?

本文关键字:之间 函数调用 电子表格 数据 持久化 脚本 apps Google      更新时间:2023-09-26

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

我不想使用单元格,这可能是另一种方式。

另一个问题,是否有可能在这个环境中创建(伪)类?最好的方法?

ScriptPropertiesScriptDB均已弃用

相反,您应该使用新的类 PropertiesService ,它被分成三个部分来缩小作用域:
  • Document -如果脚本作为附加组件发布,则获取当前文档中所有用户可以访问的属性存储。
  • Script -获取一个所有用户都可以访问的属性存储,但只能在这个脚本中。
  • User -获取只有当前用户才能访问的属性存储,并且只能在此脚本中访问。
下面是一个跨调用持久化用户属性的例子:
var properties = PropertiesService.getScriptProperties();
function saveValue(lastDate) {
  properties.setProperty('lastCalled', lastDate);
}
function getValue() {
  return properties.getProperty('lastCalled');
}

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


如果您需要在更临时的基础上存储一些东西,您可以使用CacheService API

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

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

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

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

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