Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/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 当自动脚本进行更改时,不会触发onEdit()函数_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 当自动脚本进行更改时,不会触发onEdit()函数

Google apps script 当自动脚本进行更改时,不会触发onEdit()函数,google-apps-script,google-sheets,Google Apps Script,Google Sheets,my onEdit()函数在工作表中发生更改时调用其他函数 如果用户进行了更改,则一切正常。 但是,如果更改是由google表单(表单用它得到的答案填充某些单元格)进行的,则不会触发onEdit() 我错过了什么吗?onEdit()不会由另一个编辑工作表的脚本或表单提交触发 您可以使用onFormSubmit(e),这取决于您的函数所做的工作。最好使用触发器的e参数 是的,您忘记阅读以下内容的文档: onOpen(e)在用户打开他或她有权编辑的电子表格、文档或表单时运行。 onEdit(e)在用

my onEdit()函数在工作表中发生更改时调用其他函数

如果用户进行了更改,则一切正常。 但是,如果更改是由google表单(表单用它得到的答案填充某些单元格)进行的,则不会触发onEdit()

我错过了什么吗?

onEdit()不会由另一个编辑工作表的脚本或表单提交触发

您可以使用onFormSubmit(e),这取决于您的函数所做的工作。最好使用触发器的e参数


是的,您忘记阅读以下内容的文档:

onOpen(e)
在用户打开他或她有权编辑的电子表格、文档或表单时运行。
onEdit(e)
在用户更改电子表格中的值时运行。
onInstall(e)
在用户安装加载项时运行。
doGet(e)
在用户访问web应用或程序向web应用发送HTTP GET请求时运行。
doPost(e)
程序向web应用程序发送HTTP POST请求时运行

和已安装的触发器:

尽管可安装触发器比简单触发器具有更大的灵活性,但它们仍受到若干限制:

  • 如果以只读(查看或注释)模式打开文件,则它们不会运行

  • 脚本执行和API请求不会导致触发器运行。例如,调用FormResponse.submit()以提交新表单响应不会导致表单的提交触发器运行

  • 可安装触发器总是在创建它们的人的帐户下运行。例如,如果您创建了一个可安装的打开触发器,它将在您的同事打开文档时运行(如果您的同事具有编辑权限),但它将作为您的帐户运行。这意味着,如果您在打开文档时创建了发送电子邮件的触发器,则电子邮件将始终从您的帐户发送,而不一定是从打开文档的帐户发送。但是,您可以为每个帐户创建一个可安装的触发器,这将导致每个帐户发送一封电子邮件

  • 给定帐户无法看到从第二个帐户安装的触发器,即使第一个帐户仍然可以激活这些触发器

考虑如果您的
onEdit(e)
被编程更改激活,例如如果您的
onEdit
函数更改电子表格值,会发生什么情况

在您希望表单提交激活编辑功能的情况下,您需要(表单提交没有简单的触发器)

接收表单提交触发器的示例函数:

function giveMeAnInstalledFormSubmitTrigger(formSubmitEventObject) {
  if(!formSubmitEventObject) throw new Error("You called this from the Script Editor");
  var newEventObject = /* do something with the formSubmitEventObject */;
  // Call the on edit function explicitly
  onEdit(newEventObject);
}

您可以在应用程序脚本文档中了解触发函数接收的事件对象的更多信息:

我所做的是创建了一个额外的工作表,其中的单元格与primarecell所在的单元格(发生更改的单元格)相同。先别管了。我打开scriptapp并写下代码(如果单元格发生变化,应该发生的代码)。然后我写下“如果”,取两个单元格中的两个值,然后触发每分钟一次。也就是说,如果单元格相同,“如果”循环为“真”。但是,如果主单元格中的某些内容发生更改,则它将为“false”,并且您将使用“else”。在“else”下,当该单元格中的内容发生更改时,您应该具有所需的任何函数如果你想让这个函数也作为循环,你必须有一个函数,在这个函数中你将新的值从primarycell插入到“check cell”中否则由于两个单元格不同,“如果”代码每分钟都会循环“false”

我的英语和解释不是很好:(