首页 > 解决方案 > 如果两个用户经常同时在同一个单元格上使用附加脚本,我怎样才能防止发生冲突错误?

问题描述

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

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

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

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

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



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

银行账户的起始价值是 100 美元。

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

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

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

Alice 的脚本认为总和应该是 900,并将银行帐户的新值设置为 900。

Bob 的脚本认为总和应该是 200,并将银行帐户的新值设置为 200。

最终输出应该是 1000 美元,结果却变成了 200 美元。所以损失了800美元。



再次,任何帮助将不胜感激。

标签: google-apps-scriptgoogle-sheetsrace-condition

解决方案


除了使用锁定服务之外,您可能还想查看类似帖子中关于使用Properties Service防止同时使用 Google Apps 脚本中的用户的答案,您可以在其中实现一个功能,以防止潜在用户在文件处于编辑状态时对其进行编辑当前由另一个用户编辑。

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


推荐阅读