限制onEdit触发器可对特定工作表中的特定单元格进行的更改

时间:2019-07-05 00:13:51

标签: google-apps-script google-sheets

我需要对特定工作表(选项卡)中的特定单元格进行任何编辑/更改,以生成onEdit触发器。

我已经搜索并尝试了数十种潜在的解决方案,但似乎无法使它们中的任何一个起作用。

我特定的“编辑”单元格是“ H8”,它位于名为“土地”的工作表(标签)上

仅在此示例中,我希望触发器删除工作表“ test”上单元格“ A1”的内容

尝试#1:基于此链接:https://stackoverflow.com/a/48964929/11317736

function onEdit(e) { 
  if (e.range.getA1Notation() === 'Land!H8') {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test').getRange('A1').clear();
  }
}
  

错误代码: TypeError:无法从未定义中读取属性“ source”。 (第2行,文件“代码”)关闭

尝试#2:基于许多不同的帖子

function onEdit(e) {
      var range = e.range;
      var rangeEdit = e.range.getA1Notation();
      if(rangeEdit == "Land!H8"){
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test').getRange('A1').clear();
          }
    }
  

错误代码: TypeError:无法从未定义中读取属性“ range”。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

尝试一下:

function onEdit(e) {
  var sh=e.range.getSheet();
  if(e.range.columnStart==8 && e.range.rowStart==8 && sh.getName()=="Land") {
    //put your code here
    e.source.toast('You enter a new value of ' + e.value);//remove this line
  }else{
    return;
  }
}
  

请注意,如果没有创建自己的事件对象,则无法从脚本编辑器运行此功能。另一种方法是将其复制到脚本编辑器中,然后编辑名为“ Land”的工作表的单元格H8,以查看它是否对您有用。注意:进行修改需要您实际更改H8的值。

我已经对其进行了测试,并且可以正常工作。我想我应该提到,仅将e放入onEdit(e)并不会创建事件对象。

Straight from the range documentation page:

  • clear()清除内容,格式和数据验证规则的范围。
  • clear(options)清除由给定高级选项指定的内容,格式,数据验证规则和/或注释的范围。
  • clearContent()清除范围的内容,保留 格式保持不变。
  • clearDataValidations()清除以下项的数据验证规则: 范围。
  • clearFormat()清除此范围的格式。
  • clearNote()清除给定单元格中的注释。