Google Script onedit(e) 事件仅限于特定工作表和特定范围

Arl*_*ory 3 google-sheets google-apps-script

我已经搜索并找到了我正在寻找的大部分内容。我对我发现的内容进行了一些修改,并且它有效......主要是。但是,当我在 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();
   }
}
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 6

您可以获取一些信息,通过使用事件对象编辑eonEdit(e)。事件对象的详细信息在这里。那么这个示例脚本怎么样呢?在这个样本中,

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

示例脚本:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我误解了你的问题,我很抱歉。

编辑 :

您可以通过再添加一个 if 语句来实现。在第一个 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
  }
}
Run Code Online (Sandbox Code Playgroud)

我的理解正确吗?