【问题标题】:How to run a Google Apps Script in a read-only spreadsheet?如何在只读电子表格中运行 Google Apps 脚本?
【发布时间】:2018-08-28 08:17:32
【问题描述】:

我是 Google Apps 脚本领域的新​​手,我发现自己面临着一个问题。我创建了一个作为onOpen() 触发器运行的脚本,但如果电子表格文件是只读的,则此脚本不会运行。我读到,它是只读的,它无法运行它。有没有办法解决这个问题?

我在编辑中授予权限,阻止脚本中的所有单元格。我希望人们看不到脚本,因为这使他们可以重新运行脚本并在工作表上获得“权力”。如果我创建 API,我可以将工作表保持为只读吗?

有什么建议吗?

【问题讨论】:

  • 只读 = 不执行脚本。你所说的其余部分不清楚,可能过于宽泛而无法回答
  • 感谢您的回答。此时,我想知道,通过创建 API,我是否只能授予读取权限,允许执行 API 中包含的代码。谢谢
  • “创建 API”是什么意思?你会写在哪里?你将如何执行它?当然,如果您编写自己的应用程序并让您的用户使用它,那么您就可以完全控制他们可以用它做什么和不能做什么。
  • 我的问题不可用 我的脚本可供所有人使用。如果我只读,用户看不到脚本,但脚本不会运行,如果我编辑它,用户可以看到我的脚本。那么,我怎样才能隐藏我的脚本呢?
  • 将您的脚本部署为插件,并在工作表中激活它。还可以查看与您类似的其他问题,例如 stackoverflow.com/q/38367156/9337071 webapps.stackexchange.com/questions/118256/… 不过无论如何,Google 表格 UI 中的只读用户永远无法执行脚本,也无法为他们执行脚本。

标签: google-apps-script google-sheets triggers


【解决方案1】:

所有脚本都必须在某人的授权下运行。脚本在谁的权限下运行,决定了脚本可以访问谁的数据以及该权限是否可以运行脚本。

授权概念:

  • 从脚本编辑器运行的脚本在user at the keyboard¹ 的授权下运行。自定义函数匿名运行。可安装触发器在创建触发器的用户下运行。 WebApps 根据部署期间选择的选项运行。

  • 简单触发器在这些限制下自动匿名触发²:

    脚本必须绑定到 Google 表格、幻灯片、文档或表单文件,或者是扩展这些应用程序之一的插件。如果文件以只读方式打开(查看或评论)模式。他们无法访问需要授权的服务。

  • 必须在设置触发器³的用户下设置和运行可安装触发器。

    如果以只读(查看或评论)模式打开文件,它们不会运行。可安装触发器始终在创建它们的人的帐户下运行。给定帐户无法看到从第二个帐户安装的触发器,即使虽然第一个帐户仍然可以激活这些触发器。

  • 您可以限制对电子表格、工作表或范围的访问,

扣除:

A 先生(所有者)有一个电子表格。电子表格有两张表 1.Main Sheet 和 2. Secret Sheet(表被保护和隐藏,只能由 Mr.A 编辑)。它还具有以下脚本: 1. 一个简单的触发脚本(onEdit)将时间戳设置为每个编辑单元格中的注释。 2. 已安装的触发器 (AonEdit()) 在每次编辑时从 MrA 的电子邮件发送电子邮件。 3.一个功能(summary())创建一个主工作表的摘要,并从用户的帐户发送电子邮件给自己(从脚本编辑器手动运行)。 4. 一个保护机密表的功能(protect()) 5. 一个简单的onOpen() 触发日志记录Someone opened your sheet。他授予Mr.B(编辑)编辑权限。 B先生能做什么?

  • Mr.B 编辑主工作表中的单元格 A1:

    • 简单触发器onEdit 匿名触发,并在A1 上设置时间戳作为注释。
    • 可安装触发器AonEdit 在 Mr.A 的授权下被触发,并从 Mr.A 的 gmail 发送了一封电子邮件。B 先生不知道这一点,尽管他可以看到脚本本身。
  • B先生是个狡猾的人,成功解开密单并尝试修改:

    • Mr.B 不能修改秘密表,尽管他可以完全取消隐藏/查看它
  • Mr.B 找到脚本编辑器并尝试运行函数summary()。此功能需要 gmail 权限。 Mr.B 收到 Mr.B 的 gmail 帐户的授权[¹],以便该功能可以运行。 Mr.B 授予授权,摘要从 Mr.B 的 gmail 帐户发送。

  • Mr.B 狡猾地修改了protect() 函数以授予自己对机密表的编辑权限。键盘上的用户是 Mr.B。 B先生的权限不够。他收到以下错误:

    您正在尝试编辑/删除受保护的单元格或对象。如果您需要编辑,请联系电子表格所有者以取消保护。

  • Mr.A(所有者)知道 Mr.B 未经授权的访问尝试,他限制对所有工作表的编辑访问。现在,B 先生即使有权编辑电子表格,他也不能编辑电子表格中的任何工作表。每当他打开工作表时,就会触发简单的onOpen() 记录Someone opened your sheet。然而,B 先生即使现在也可以运行函数summary()(如果他有脚本编辑器链接)来获取工作表的摘要。

解决方案:

因为这允许他们重新运行脚本并在工作表上获得“权力”。

具有写入权限的用户可以进入脚本并修改权限。

如上所述,这是不可能的。即使在脚本级别也维护工作表/范围编辑权限。然而,一个潜在的漏洞是AonEdit() 函数。如果 Mr.B 知道 Mr.A 为 AonEdit() 函数设置了可安装触发器,他可以修改 AonEdit() 函数为 protection.remove(),它将在 Mr.A 的权限下运行(可安装触发器运行在创建它的人),因此保护被删除。

我希望人们看不到脚本。

您可以使用独立脚本。您还可以将可安装触发器[³] 与受这些触发器限制的独立脚本一起使用(例如它只会在您的权限下运行)。由于脚本未绑定到电子表格,因此电子表格的编辑者没有脚本的编辑/查看权限。或者,您可以发布一个插件/webapp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多