针对特定的图纸范围运行onEdit(e)时触发错误

时间:2019-03-08 09:13:20

标签: google-apps-script google-sheets spreadsheet

我需要限制功能onEdit()仅在特定范围内进行更改时才触发。用户在B列中选择一个值,并为A列填充特定值。 尽管下面的功能似乎可以按需运行,但是在Apps编辑器中运行时会引发错误:
TypeError: Cannot read property "source" from undefined.

显然是指e.source.getSheetName

function onEdit(e) {

  if (
    e.source.getSheetName() == "Activity" &&
    e.range.columnStart == 2 &&
    e.range.columnEnd == 2 &&
    e.range.rowStart >= 2 &&
    e.range.rowEnd <= 100
  ) {
    e.value !=='' ? e.range.offset(0,-1).setValue(caseID()) : null
    };
  };

我不确定是否可以忽略它,因为该函数有效((当B列中的值更改时,将caseID函数的结果插入A列)? 预先谢谢你,

2 个答案:

答案 0 :(得分:1)

简短的回答::我想,我们暂时可以忽略它。

原因::当我们在Apps Editor中手动运行该功能时,我们不会传递事件对象。因此,这就是e错误undefined的原因。

我想我们可以将手动运行该函数解释为运行onEdit(),而函数签名需要参数e。因此,手动执行e时未定义。

但是当由于在工作表中进行编辑而被触发时,该事件对象将作为参数传递给函数,因此它可以按预期工作。

答案 1 :(得分:1)

我相信getSheetName()仅返回第一张工作表的名称,而不是已编辑工作表的名称。要获得正确的已编辑工作表名称,您应该先获取工作表,然后再获取其名称。另外,最好从范围而不是来源进行操作:

e.range.getSheet().getName() === "Activity"