我已经阅读并重新阅读了文档(这里)和这里以及相关的。是否有其他一些文档可以帮助我更好地了解什么类型的权限需要什么类型的格式等?
我要解决的难题是:当有人编辑单元格时,我希望根据编辑它的用户来格式化单元格颜色。
编写只适合我自己的代码很容易;但是,在让它为另一个人工作时,我一直遇到权限问题。
这就是我感到困惑的地方。我将解释我的理解,希望您能纠正我或将我指向包含更多信息的文档。编辑单元格时似乎有 3 种方法可以使事件发生:编辑事件、简单的 onEdit 触发器和可安装的onEdit
触发器。
要创建一个简单的 onEdit 触发器,您需要创建一个名为 的新函数onEdit()
。要捕获事件,请将字符串放在括号中,例如onEdit(e)
。然后要访问存储在编辑中的信息,请键入类似var range = e.source.getActiveRange()
. 简单事件触发器的安全性受到限制,无法获取用户的名称/ activeUser
,因此我无法使用它们来解决我的问题。
要创建捕获事件的可安装 onEdit 触发器,您需要创建一个新函数,例如myFunction(e)
. 然后你进入脚本编辑器,点击“资源”,从下拉列表中选择你的函数,点击“从电子表格”,然后onEdit
。在这种情况下,要访问有关事件的信息,请键入类似var range = e.range
.
这种方法应该提供更高级的权限,这样我应该能够去“variable user = e.user”然后“ss.toast(user)”来查看用户的名字。但是,当我以外的任何人这样做时,吐司是空白的。另外,有了这个,我知道脚本“以安装脚本的用户身份运行”,但这是否意味着我无法访问触发脚本的人的身份?
要创建一个编辑事件,你……嗯……这和创建一个触发器是一样的吗?我想我完全迷失了这个。
那么,如果我越过我的电线会发生什么——例如,我命名一些东西myFunction(e)
并制作一个可安装的 onEdit 触发器,但是然后range = e.range
我键入而不是键入range = e.source.getActiveRange
?它似乎对我来说是一样的,但是我是否交叉了权限,以便它像一个简单的事件而不是一个可安装的事件?
文档说:
“他们可能无法确定哪个用户触发了正在处理的事件。对于时钟滴答事件,这并不重要,但在电子表格编辑事件中,更改电子表格的用户不一定是可识别的。”
所以……不一定?什么时候有效,什么时候无效?在我的情况下可能吗?我如何找出答案(除了我目前失败的试错方法?)。