【问题标题】:Is it possible to set permission in Google Sheet for selected cells per user?是否可以在 Google 表格中为每个用户的选定单元格设置权限?
【发布时间】:2021-03-06 15:06:31
【问题描述】:

场景很简单:您作为团队负责人在 Google Sheet 文档中管理团队出勤。每个人都应该有能力编辑只适合他的行。所以这个人应该不能编辑同事的单元格,但仍然可以为自己输入一些数据。

Google 表格在 UI 中提供的选项是 restrictions 到:

  1. 保护整张纸
  2. 保护整个工作表,但有例外
  3. 保护工作表上的选定范围

所有这些选项都提供了为此Restriction 添加/编辑权限的能力(第一次使用时不清楚)。通过在此处设置用户自己实际上导致:

  • 不对他应用restriction(这样用户仍然可以编辑工作表)
  • 用户可以编辑restriction(这是意料之中的)

问题是是否有某种方法可以防止多个用户在同一张工作表上输入多个单元格,但他的限制将适用于每个用户?

我正在寻找的解决方案可以是从开发人员或经典用户的角度。

我期待的是这样的:

  1. 锁定整张纸
  2. 设置用户 A 编辑范围 A1:B2 的权限
  3. 为用户 B 设置编辑范围 B2:C3 的权限

我访问过How to protect ranges per specific users in google sheet?,但如上所述,它只添加了编辑器,restriction 不适用于它们。

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。我可以问你关于你的问题吗? 1、Lock whole listlist是什么意思? 2. 我无法理解I've visited How to protect ranges per specific users in google sheet? , but as stated above, it only adds editors, where the restriction is not applied to them.。可以问一下它的详细情况吗? 3. 能否请教一下range的保护和你期望的restriction的区别?
  • 1.抱歉,我的语言与 EN 不同,所以我使用同义词来解释机制。这是为了“保护名单”。右键单击列表名称,选择“保护工作表” 2. 我已尝试手动输入此列表限制/保护的编辑器。但是一旦我这样做了,用户就可以编辑整个列表(不仅是从保护/限制中排除的范围)+他可以编辑这个限制。 3. 我希望能够通过一些范围异常来保护列表(与现在相同),但另外还选择适用此限制的用户。
  • 您能否具体说明list 的含义?您要保护范围还是工作表?您能否展示您的代码,也许还可以显示您的工作表的屏幕截图 - 以了解工作表的结构和代码中的错误。
  • @ziganotschka 再次抱歉,语言障碍,在 CZ 中是“list”,在英语中是“sheet”。通常他们翻译相同。已编辑的问题。这意味着我想保护整个工作表期望相同的范围。
  • 感谢您的回复。现在我注意到你的问题已经解决了。我很高兴。

标签: google-sheets google-sheets-api


【解决方案1】:

当您锁定整个工作表时,不幸的是无法解锁此工作表的子范围

原因是对工作表的锁定比对范围的解锁具有更高的访问优先级。

因此,您需要使用一种解决方法,将工作表拆分为不同的范围,并为每个范围定义不同的权限。

在你的情况下:

  • 范围 1:A1:A2 - 只有用户 A 有权访问
  • 范围 2:B1 - 只有用户 A 有权访问
  • 范围 3:B2 - 用户 A 和用户 B 具有访问权限
  • 范围 4:C2 - 只有用户 B 有权访问
  • 范围 5:B3:C3 - 只有用户 B 有权访问

工作表的其余部分也需要分成范围,所有编辑器都需要从中删除。

显然,像这样拆分范围非常乏味,但有助于使过程自动化一点的方法是使用 RangeLists

我可以推荐你使用@Tanaike 开发的RangeListApplibrary

更新

有一个名为setUnprotectedRanges(ranges)的方法可以覆盖工作表保护。

示例:

var protection = sheet.protect().setDescription('Sample protected sheet');
var unprotected = sheet.getRange('B2:C5');
protection.setUnprotectedRanges([unprotected]);

请注意,此方法完全解除了保护,因此您仍需要为给定范围设置单独的保护,以确保只有 1 个用户可以编辑此范围。

【讨论】:

  • 决定更改我之前的评论:如何阻止用户A输入值到A1:B2范围内,然后阻止用户B进入B2:C3 中的值?我在任何地方都没有找到这个功能。
  • 就像在您链接的解决方案中所做的那样:protection1.removeEditors(protection1.getEditors()); protection1.addEditor('Editor1@gmail.com');protection2.removeEditors(protection2.getEditors()); protection2.addEditor('Editor2@gmail.com');
  • 我真的很惊讶它的工作原理,我已经尝试了几个小时并且用户总是可以选择编辑。但我理解原则,它是有道理/有效的。谢谢!
  • 顺便说一句。我现在意识到您可以使用方法setUnprotectedRanges(ranges)。我相信这应该对你有用。
猜你喜欢
  • 2016-03-09
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
相关资源
最近更新 更多