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

时间:2017-09-30 04:14:46

标签: google-apps-script google-sheets

我已经冲了过去,发现了我正在寻找的东西。我对我发现的东西进行了一些修改,但它的工作原理......主要是。但是当我在C列的不同工作表中进行编辑时,它会在DATA工作表中运行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();
   }
}

1 个答案:

答案 0 :(得分:1)

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

在电子表格上编辑单元格时,如果工作表名称,列和行分别为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语句来实现。在1st if语句中,当工作表名称为Data时使用它。在2nd 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
  }
}

我的理解是否正确?