Google apps script 针对特定图纸范围运行OneEdit(e)时出错
我需要将函数Google apps script 针对特定图纸范围运行OneEdit(e)时出错,google-apps-script,google-sheets,spreadsheet,Google Apps Script,Google Sheets,Spreadsheet,我需要将函数onEdit()限制为仅在特定范围内进行更改时启动。用户在B列中选择一个值,a列将填充一个特定值。 尽管下面的函数似乎可以按预期工作,但当从应用程序编辑器中运行时,它会抛出一个错误: TypeError:无法从未定义的文件中读取属性“source”。 显然是指e.source.getSheetName行 function onEdit(e) { if ( e.source.getSheetName() == "Activity" && e.ran
onEdit()
限制为仅在特定范围内进行更改时启动。用户在B列中选择一个值,a列将填充一个特定值。
尽管下面的函数似乎可以按预期工作,但当从应用程序编辑器中运行时,它会抛出一个错误:TypeError:无法从未定义的文件中读取属性“source”。
显然是指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
};
};
函数onEdit(e){
如果(
e、 source.getSheetName()=“活动”&&
e、 range.columnStart==2&&
e、 range.columnEnd==2&&
e、 range.rowStart>=2&&
e、 range.rowEnd简短回答:我想,我们现在可以忽略这一点
原因:当我们在应用程序编辑器中手动运行该函数时,我们不会传递事件对象。这就是为什么它将e
作为未定义的错误给出的原因
我想我们可以将手动运行该函数解释为运行onEdit()
,而函数签名需要参数e
。这就是为什么手动执行时e
是未定义的
但当它由于在工作表中编辑而被触发时,该事件对象将作为参数传递给函数,因此它将按预期工作。简短回答:我想,我们现在可以忽略它
原因:当我们在应用程序编辑器中手动运行该函数时,我们不会传递事件对象。这就是为什么它将e
作为未定义的错误给出的原因
我想我们可以将手动运行该函数解释为运行onEdit()
,而函数签名需要参数e
。这就是为什么手动执行时e
是未定义的
但是当它由于在工作表中编辑而被触发时,该事件对象将作为参数传递给函数,因此它将按预期工作。我相信getSheetName()仅返回第一张工作表的名称,而不是已编辑工作表的名称。要获取正确的已编辑工作表名称,应先获取工作表,然后再获取其名称。此外,最好从范围而不是源进行此操作:
e.range.getSheet().getName() === "Activity"
我相信getSheetName()只返回第一张工作表的名称,而不是编辑过的工作表的名称。要获得正确的编辑过的工作表名称,您应该先获取工作表,然后再获取其名称。此外,最好从范围而不是源位置执行此操作:
e.range.getSheet().getName() === "Activity"
e
是未定义的
,因为没有编辑事件(因为没有编辑)。有关实际错误,请参见查看>执行。电子表格类中也没有getSheetName()
方法。for循环、ss、范围和活动是不必要的。@TheMastergetSheetName()
这里呢:@管理员已经更新了代码,删除了ss、activity、range
和for
-循环-谢谢!是的。似乎有这样的方法。但是我认为该方法只会提供第一张表的名称,而不是编辑过的表的名称。可能重复的e
是未定义的,因为e没有编辑事件(因为没有编辑)。有关实际错误,请参见查看>执行。电子表格类中也没有getSheetName()
方法。for循环、ss、范围和活动是不必要的。@TheMastergetSheetName()
这里呢:@TheMaster已经更新了代码,删除了ss,activity,range
和for
-循环-谢谢!是的。似乎有这样的方法。但是我认为该方法只会提供第一张表的名称,而不是编辑过的表的名称。关于这行代码的可能重复:e.value!='“?e.range.offset(0,-1).setValue(caseID()):null
-如果用户删除列B中的值,我如何清除列A中的值?关于这行代码:e.value!==”?e.range.offset(0,-1).setValue(caseID()):null
-如果用户删除列B中的值,我如何清除列A中的值?