首页 > 解决方案 > 如何使 onEdit(e) 在受保护的工作表上运行?Google Apps 脚本

问题描述

我有一个代码:

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);}
}

标签: google-apps-scriptgoogle-sheets

解决方案


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

从:

function onEdit(e){

到:

function installedOnEdit(e){

另外,请将 OnEdit 触发器安装到函数installedOnEdit中。并且,请再次测试。

参考:


推荐阅读