我需要限制功能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列)? 预先谢谢你,
答案 0 :(得分:1)
简短的回答::我想,我们暂时可以忽略它。
原因::当我们在Apps Editor中手动运行该功能时,我们不会传递事件对象。因此,这就是e
错误undefined
的原因。
我想我们可以将手动运行该函数解释为运行onEdit()
,而函数签名需要参数e
。因此,手动执行e
时未定义。
但是当由于在工作表中进行编辑而被触发时,该事件对象将作为参数传递给函数,因此它可以按预期工作。
答案 1 :(得分:1)
我相信getSheetName()仅返回第一张工作表的名称,而不是已编辑工作表的名称。要获得正确的已编辑工作表名称,您应该先获取工作表,然后再获取其名称。另外,最好从范围而不是来源进行操作:
e.range.getSheet().getName() === "Activity"