如果两个用户经常在同一个单元格上同时使用添加脚本,我怎样才能防止发生碰撞错误?

If two users routinely use an addition-script on the same cell simultaneously, how can I prevent collision-errors from happening?

这个问题让我很担心...任何帮助将不胜感激。

我有三个电子表格,A、B 和 C(我拥有所有这些电子表格)。然后我创建了一个脚本,让一个用户将钱从 A 转移到 C,而另一个用户将钱从 B 转移到 C。这两个用户总是将钱发送到 C 中完全相同的单元格(我们称该单元格为“银行帐户” ”)。而且,汇款往往同时或几乎同时发生,因此发生碰撞错误的风险很高。而且,以防万一,脚本始终“以我的身份”(管理员)运行,无论哪个用户命令执行脚本。

所以这是我的问题的核心:当有人从 A 向 C 转账时,如何暂时锁定 C 中的“银行账户”单元格,然后,一旦从 A 向 C 转账完成,从 B 到 C 的转移会自动开始吗?我如何在不完全锁定 C 的情况下做到这一点(很多人一直在修改 C,如果我锁定整个电子表格,即使只是几秒钟,也会大大影响他们的工作效率)。

或者创建某种缓冲系统而不是暂时锁定单元会更好?

下面是我所说的“碰撞错误”的确切含义的示例:



我将使用术语“银行帐户”来指代接收款项的单元格。

银行账户的初始值为 100 美元。

Alice 激活脚本向银行账户添加 800 美元,Bob 激活脚本向银行账户添加 100 美元。

Alice 的脚本将银行账户的当前值读取为 100。

Bob 的脚本将银行账户的当前值读取为 100。

Alice 的脚本计算出总和应为 900,并将银行帐户的新值设置为 900。

Bob 的脚本计算出总和应为 200,并将银行帐户的新值设置为 200。

最终产量应该是1000美元,但变成了200美元。所以损失了800块钱。



再一次,我们将不胜感激。

除了使用锁定服务外,您可能还想查看类似 post 关于 by using Properties Service 的答案,您可以在其中实现防止潜在用户编辑文件的功能而它当前正被另一个用户编辑。

根据您的问题,是的,鉴于可能有多个用户同时访问您的电子表格,运行 您的脚本中的数据可能会被覆盖或导致冲突。

AFAIK 你所描述的是竞争条件。 Google 表格和 Google Apps 脚本没有默认措施来防止这种情况发生,因此您应该定义应如何处理这种情况。

一个资源锁定服务,另一个资源属性服务。两者都有三个作用域

  • 脚本
  • 用户
  • 文档

在 Google 表格中,您还可以使用 保护措施 ,在 Google Drive 文件中,您通常可以使用共享设置。

资源