Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 针对特定图纸范围运行OneEdit(e)时出错_Google Apps Script_Google Sheets_Spreadsheet - Fatal编程技术网

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、范围和活动是不必要的。@TheMaster
getSheetName()
这里呢:@管理员已经更新了代码,删除了
ss、activity、range
for
-循环-谢谢!是的。似乎有这样的方法。但是我认为该方法只会提供第一张表的名称,而不是编辑过的表的名称。可能重复的
e
未定义的
,因为e没有编辑事件(因为没有编辑)。有关实际错误,请参见查看>执行。电子表格类中也没有
getSheetName()
方法。for循环、ss、范围和活动是不必要的。@TheMaster
getSheetName()
这里呢:@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中的值?