我有一个代码:
account
function onEdit(e){
if (e.range.columnStart != 7 && e.range.columnStart != 8 || e.value <= 0) return;
let d = new Date();
if (e.range.columnStart == 7 && e.value == null){
e.range.offset(0,-2).setValue(null);}
else if (e.range.columnStart == 7 && e.value != null) {
e.range.offset(0,-2).setValue(d);}
else if (e.range.columnStart == 8 && e.value != null) {
e.range.offset(0,-3).setValue(d);}
}
function Lock(){
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var protection = sh.protect().setDescription('Lock');
var me = Session.getEffectiveUser();
protection.addEditor(me).setUnprotectedRanges(sh.getRange("I2:I").createTextFinder("^(?!Done).*$").matchEntireCell(true).useRegularExpression(true).findAll().map(r => r.offset(0, -3, 1, 3)));
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()){
protection.setDomainEdit(false);}
}
的值为 I2:I
,则将锁定范围。Done
不能运行(错误:您正在尝试编辑受保护的单元格或对象。如果您需要编辑,请联系电子表格所有者以禁用保护)。因为函数 onEdit(e)
保护了工作表,只留下那些列 Lock()
不是 I2:I
的单元格。答案 0 :(得分:2)
我认为在您的情况下,使用简单触发器可能是您出现问题的原因。那么,下面的修改如何呢?在此修改中,函数名称由 onEdit
更改为 installedOnEdit
,并将可安装的 OnEdit 触发器安装到重命名的函数中。
function onEdit(e){
function installedOnEdit(e){
还有,please install the OnEdit trigger to the function installedOnEdit
。并且,请再次测试。