GAS 脚本是否可以锁定 Google 表格,以便在脚本完成之前其他人无法更改它

Is it possible for a GAS script to lock a Google Sheet so nobody else can alter it until the script is done

提问人:IMTheNachoMan 提问时间:10/2/2019 更新时间:10/2/2019 访问量:199

问:

我熟悉锁定服务,但这仅适用于锁定脚本。

我有一些代码可以“处理”一个大的谷歌表格。我的脚本需要对行重新排序。我需要/想要这样做,以便在脚本运行时,没有其他人可以更改顺序。但是,我仍然需要另一个脚本才能附加行。

我们使用 Google 表单作为我们团队的摄入量。它将行追加到工作表中。我有一份每小时的工作,将遍历所有行/记录并“处理它们”。我有一列,用于存储上次“处理”记录/行的时间。我想对该列进行排序,使“最旧”的记录位于顶部,然后从上到下开始处理。如果脚本失败或超时,则下一次迭代将重新开始......

我知道我可以使用 or 获取一个数组,然后将数组写回来,但我担心如果有人对行进行排序会发生什么,因为在写回数组时会弄乱东西。getValuesgetDisplayValues

有什么方法可以实现我的目标吗?我希望能够处理记录,并保持行顺序以避免中断我的处理。

google-apps-script 谷歌表格

评论

0赞 Sourabh Choraria 10/2/2019
我想您可以在脚本函数的开头使用保护类来删除所有编辑器的访问权限,然后将这些用户添加回能够在函数结束时进行编辑(或者简单地说,删除保护)。

答:

3赞 Wicket 10/2/2019 #1

“完全”阻止电子表格的方法是更改电子表格共享设置。删除所有编辑器或将其更改为查看器,脚本完成后,将它们更改回编辑器。在极端情况下,使用第二个帐户作为关键文件/电子表格的所有者,并且仅将其用于此目的,因此您可以阻止您的常规帐户对电子表格进行更改。

注意:Google 表单可用于编辑链接的电子表格。editResponseUrl

我面临类似的情况,但我采取了不同的方法,我使用索引/键列(您可以使用时间戳列)并使用索引/键将每个编辑的行保存到正确的位置,然后在单个操作中写入整个结果数组(通过使用)。就我而言,这很简单,因为我只需要值,我不担心注释、数据验证、条件格式、评论等,而且没有链接到我的电子表格的 Google 表单。setValues()

相关

评论

2赞 TheMaster 10/3/2019
@IMTheNacho 您还可以使用隐藏的开发人员元数据来遵循上述相同的索引/键方法。
0赞 IMTheNachoMan 12/10/2019
@TheMaster我不知道那在那里。我会调查的。看起来它可能真的很有帮助。谢谢!
1赞 IMTheNachoMan 12/10/2019
谢谢@Rubén。我最终按照你说的做了。我还使用 Data Studio 让人们查看数据,这样他们就可以在 Data Studio 中进行排序,而不会弄乱源数据。:)