在服务帐户拥有的工作表上创建onEdit触发器 [英] Creating an onEdit trigger on a sheet owned by a service account

查看:30
本文介绍了在服务帐户拥有的工作表上创建onEdit触发器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个属于服务帐户的GSheet,我想添加一个"On Edit"触发器来接收实时编辑通知。

到目前为止,我已尝试/查看:

  • 只需将onEdit函数添加到绑定的脚本中,但Google不允许在脚本上运行Apps脚本(问题将在后面讨论here):

Google Apps脚本:该脚本无法运行,因为它属于服务帐户。请在运行之前将项目复制或转移到有效帐户。

还有其他想法吗,或者Google根本不允许Apps脚本在服务帐户下运行这一事实是一种作秀障碍吗?"

推荐答案

我相信您的目标如下。

  • 您有一个由服务帐户创建的Google电子表格。
  • 您要在此电子表格上使用OnEdit触发器。

问题和解决方法:

在当前阶段,不幸的是,当Google电子表格的所有者是服务帐户时。无法运行Google Apps脚本。这样,即使将onEdit函数放到脚本编辑器中,也无法运行该脚本。看来这是目前谷歌方面的规范。不幸的是,在目前阶段,您的目标不能直接实现。我认为这是您问题的当前答案。

但是,我认为或许可以提出一种解决办法。幸运的是,电子表格的内置功能也可以在服务帐户创建的电子表格中使用。我认为这或许可以用作解决办法。

当我看到您的问题时,我想起了以下帖子。

我认为当使用这些帖子时,或许可以提出解决办法。在此回答中,我想提出一种实现您目标的解决方法。因此,请将其视为伪OnEdit触发器。

此解决方法的流程如下所示。

  1. 准备Web应用程序。
    • 此Web Apps部署在Google Apps脚本项目中,该项目由可以运行该脚本的帐户创建。请注意这一点。
  2. 在";Sheet1";中使用伪OnEdit触发器时,将IMPORTXML放到另一个工作表中(例如,它是";Sheet2";.)。IMPORTXML对Web应用程序的请求。
    • 此电子表格是由服务帐户创建的电子表格。
  3. 编辑";Sheet1";中的单元格时,将运行";Sheet2&Quot;中的公式。

通过此流程,当编辑";Sheet1";中的单元格时,可以运行Web Apps的Google Apps脚本。这是此解决方法的伪OnEdit触发器。

用法:

1.为Web应用创建Google Apps脚本。

要使用Web Apps,请使用可以运行该脚本的帐户创建Google Apps脚本项目。在本例中,作为示例情况,请按您的帐户而不是服务帐户创建Google Apps脚本项目。

2.示例脚本:

请将以下脚本复制并粘贴到创建的Google Apps脚本项目的脚本编辑器中。

function doGet(e) {

  // do something
  // Please set the script you want to use.

  return ContentService.createTextOutput(`<result>Edited at ${new Date().toISOString()}</result>`).setMimeType(ContentService.MimeType.XML);
}

3.部署Web应用。

详细信息请参见the official document

  1. 在脚本编辑器中,请单击脚本编辑器右上角的";,单击Deploy&Quot;->;&Quot;New Deployment&Quot;。
  2. 请单击";Select type";->;";Web App";。
  3. 请在";Deployment Configuration&Quot;下的字段中输入有关Web App的信息。
  4. 请为";选择";Me";作为";执行。
    • 这就是此解决方法的重要性。
  5. 请为";有访问权限的";选择";任何人(&/strong>)。
    • 考虑到您的情况,我认为此设置可能合适。
  6. 请单击"部署&q;"按钮。
  7. 复制Web应用的URL。就像https://script.google.com/macros/s/###/exec

3.测试。

  1. 请在服务帐户创建的Google电子表格中准备2张工作表。它们是";Sheet1";和";Sheet2";。

  2. 请将以下公式放在";Sheet2";的";A1";中。在这种情况下,请使用您的Web Apps URL。并且,请确认该值是从部署的Web应用返回的。如果无法执行此操作,请再次检查以上流程。

     =IMPORTXML("https://script.google.com/macros/s/###/exec?values="&TEXTJOIN(",",TRUE,Sheet1!A:Z),"/result")
    
    • 此公式是示例公式。因此,请根据您的实际情况修改范围和公式。
  3. 请编辑";Sheet1";上的单元格。使用上述公式时,请编辑&QOOT;A:Z&QOOT;中的单元格。由此,刷新了";Sheet2";的单元格&q;A1&q;,并且通过该刷新,运行了Web Apps的Google Apps脚本。这是此解决方法的伪OnEdit触发器。

注意:

  • 当您修改Google Apps脚本时,请将部署修改为新版本。由此,修改后的脚本反映在Web应用程序中。请小心此操作。
  • 您可以在";Redeploying Web Apps without Changing URL of Web Apps for new IDE";的报告中查看这方面的详细信息。
  • 在此解决方法中,我认为您可以通过检查编辑工作表前后的差异来检索编辑的单元格。但是,这是一个解释此解决方法的简单脚本。因此,如果您使用此解决方法,请根据您的实际情况修改脚本。

引用:

这篇关于在服务帐户拥有的工作表上创建onEdit触发器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆