如何使 onEdit(e) 在受保护的工作表上运行? Google Apps 脚本

时间:2021-05-28 03:05:59

标签: google-apps-script google-sheets

我有一个代码:

account
  • 运行 2 个函数后。我在第 7 列或第 8 列中进行编辑,将当前日期放入指定的单元格(工作表中的第 5 列),如果 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 的单元格。
  • 有什么解决办法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

我认为在您的情况下,使用简单触发器可能是您出现问题的原因。那么,下面的修改如何呢?在此修改中,函数名称由 onEdit 更改为 installedOnEdit,并将可安装的 OnEdit 触发器安装到重命名的函数中。

来自:

function onEdit(e){

致:

function installedOnEdit(e){

还有,please install the OnEdit trigger to the function installedOnEdit。并且,请再次测试。

参考: