自动脚本

时间:2018-04-17 13:15:29

标签: google-apps-script google-sheets

我的onEdit()函数在工作表发生变化时调用其他函数。

如果用户进行更改,则一切正常。 但如果更改是通过google-form(表单填充一些单元格并获得答案)onEdit()不会触发。

我想念一下吗?

3 个答案:

答案 0 :(得分:3)

是的,您忘了阅读simple triggers的文档:

  

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

并安装了触发器:

  

尽管可安装触发器比简单触发器提供更多灵活性,但它们仍受到若干限制:

     
      
  • 如果以只读(查看或评论)模式打开文件,它们就不会运行。

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

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

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

  •   

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

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

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

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);
}

您可以在Apps脚本文档中阅读有关触发函数接收的事件对象的更多信息:https://developers.google.com/apps-script/guides/triggers/events

答案 1 :(得分:2)

编辑工作表或表单提交的其他脚本不会触发

onEdit()。

你可以使用onFormSubmit(e)代替你的函数,使用触发器的e参数是一个好主意。

https://developers.google.com/apps-script/guides/triggers/events#form-submit

答案 2 :(得分:1)

我所做的是,我创建了一个带有单元格的额外工作表,该单元格与primarecell所在的单元格相同(更改的单元格)。现在就离开。我打开scriptapp并写下代码(如果单元格发生更改应发生的代码)。然后我写下“ if ”,并在两个单元格中获取两个值,并创建一个每分钟触发一次的触发器。话虽如此,如果单元格相同,则“ if ”在“ true ”上循环。但是,如果主单元格上发生了某些更改,则将为“ false ”,而您将使用“ else ”。在“ else ”下,您应该具有在该单元格中发生变化时想要的所有功能。 +如果您希望将同样的功能作为循环,则必须将功能从主单元格插入新值到“检查单元格”中。 否则 if ”代码将每分钟循环“ false ”,因为两个单元格都不相同。

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