Google脚本ONEDIT(E)事件仅限于特定的表格和特定范围



我已经搜寻并发现了我想要的。我已经对发现的东西进行了一些修改,并且它起作用了。但是,当我在C列中的不同表中进行编辑时,它会在数据表中运行OnEdit()。我不想要那个,我无法停止。

我只希望它监视"数据"表。对于C3范围:C5000或C3:C Lastrow,这是理想的。

不应超过5000行。
function onEdit(e) {  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data_sheet = ss.getSheetByName("Data");
  var editRange = ss.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var range = data_sheet.getRange("C3:C5000");
  var rangeRowStart = range.getRow();
  var rangeRowEnd = rangeRowStart + range.getHeight();
  var rangeColStart = range.getColumn();
  var rangeColEnd = rangeColStart + range.getWidth();
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  {
    RefreshImport2();
   }
}

您可以使用onEdit(e)的事件对象e检索几个信息进行编辑。事件对象的详细信息在这里。那么这个示例脚本呢?在此样本中,

当您在电子表格上编辑单元格时,如果表格名称,列和行分别为 DataC3 <= row <= 5000,则运行RefreshImport2()

示例脚本:

function onEdit(e) {
  if (
    e.source.getSheetName() == "Data" &&
    e.range.columnStart == 3 &&
    e.range.columnEnd == 3 &&
    e.range.rowStart >= 3 &&
    e.range.rowEnd <= 5000
  ) {
    RefreshImport2();
  }
}

如果我误解了您的问题,对不起。

编辑:

您可以通过再添加一个if语句来做到这一点。在第1 if语句中,当表名称为 Data时使用它。在第2 if语句中,当名称为 Data Entry时使用它。

的每个if语句都不会互相干扰。
function onEdit(e) {
  if (
    e.source.getSheetName() == "Data" &&
    e.range.columnStart == 3 &&
    e.range.columnEnd == 3 &&
    e.range.rowStart >= 3 &&
    e.range.rowEnd <= 5000
  ) {
    RefreshImport2();
  }
  if (e.source.getSheetName() == "Data Entry") {
    // do something
  }
}

我的理解正确吗?

最新更新