我试图在单元格中的第一个条目和使用下面的代码并获得正确的结果后锁定谷歌表中的单元格。然而,在此代码中,单元格在第一次输入后被锁定,但所有者和编辑器可以对锁定的单元格进行进一步编辑,但是,我想为甚至输入数据的人锁定单元格,即只有所有者可以在锁定enter code here
后对单元格进行编辑。
function onEdit(e){
let protection = e.range.protect();
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
以上任何帮助将不胜感激。下面是工作表的链接:
https://docs.google.com/spreadsheets/d/14qFZOKYUiQL4gKuLfdHPQwOgQ5LoY5P7KZyHN8ev-qY/edit?usp=sharing
如果你的脚本是由OnEdit的简单触发器运行的,我认为你的问题的原因可能是由于这个。在这种情况下,请使用可安装的OnEdit触发器。
当您安装可安装的OnEdit触发器时,请重命名函数名。因为当安装onEdit
函数作为可安装触发器时,当编辑单元格时,异步进程运行2次onEdit
。请小心点。
那么,下面的修改如何?
修改脚本:
function installedOnEdit(e) {
let protection = e.range.protect();
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
- 在此脚本中,当
installTrigger
运行时,可安装的OnEdit触发器被安装到installedOnEdit
函数中。这样,当不是电子表格所有者的用户编辑单元格时,该单元格受到保护。 参考:
- 安装触发
补充道:
关于你接下来的新问题,
我想为编辑器锁定工作表,即只有所有者可以编辑工作表。
在这种情况下,请将上述脚本修改如下:
修改脚本:
function installedOnEdit(e) {
let protection = e.range.getSheet().protect();
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
- 顺便说一下,在这个脚本中,它假设您是电子表格的所有者,并且安装了OnEdit触发器。因此,如果您想使用
installTrigger
安装OnEdit触发器,请由所有者运行脚本。请小心。