我的onEdit()函数在工作表发生变化时调用其他函数。
如果用户进行更改,则一切正常。 但如果更改是通过google-form(表单填充一些单元格并获得答案)onEdit()不会触发。
我想念一下吗?
答案 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 ”,因为两个单元格都不相同。
我的英语和解释不是很好:(