【问题标题】:onEdit() function does not triggered when change was made by automatic script自动脚本进行更改时不会触发 onEdit() 函数
【发布时间】:2018-04-17 13:15:29
【问题描述】:

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

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

我错过了什么吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

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

    onOpen(e) 在用户打开其有权编辑的电子表格、文档或表单时运行。
    onEdit(e)用户更改电子表格中的值时运行.
    onInstall(e) 在用户安装插件时运行。
    doGet(e) 在用户访问 Web 应用程序或程序向 Web 应用程序发送 HTTP GET 请求时运行。
    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

    【讨论】:

      【解决方案2】:

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

      您可以使用 onFormSubmit(e) 代替,具体取决于您的函数执行的操作,最好使用触发器的 e 参数。

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

      【讨论】:

        【解决方案3】:

        我所做的是我创建了一个额外的工作表,其中的单元格与 primarecell 所在的单元格相同(更改的单元格)。暂时离开它。我打开脚本应用程序并写下代码(如果单元格更改应该发生的代码)。然后我写下 "if" 并取两个单元格中的两个值,然后触发每分钟触发一次。话虽如此,如果单元格相同,则“if”在“true”上循环。但是,如果主单元格发生变化,它将是“false”,而您使用“else”。在“else”下,当该单元格中的某些内容发生变化时,您应该拥有您想要的任何功能。 + 如果您希望它也用作循环,您必须有一个功能,您可以将新值从主单元格插入到“检查单元格”。 否则if”代码将每分钟循环一次“false”,因为两个单元格不相同。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多