是否可以在 Google Sheet 中为每个用户选定的单元格设置权限?
Is it possible to set permission in Google Sheet for selected cells per user?
场景很简单:您作为团队负责人在 Google Sheet 文档中管理团队出勤。每个人都应该能够编辑仅供他使用的行。所以这个人应该不能编辑同事的单元格,但仍然可以为自己输入一些数据。
Google Sheet 在 UI 中提供的选项是 restrictions
到:
- 保护整体sheet
- 保护整个 sheet 例外
- 保护 sheet
上的选定范围
所有这些选项都提供了对此 Restriction
add/edit 权限的能力(第一次使用时不清楚)。通过在这里设置用户自己实际上导致:
- 不应用
restriction
给他(所以用户仍然可以编辑sheet)
- 用户可以编辑
restriction
(这有点符合预期)
问题是是否有某种方法可以防止多个用户在同一个 sheet 上输入多个单元格,但他的限制将适用于每个用户?
我正在寻找的解决方案可以是从开发人员或经典用户的角度。
我希望是这样的:
- 全部锁定sheet
- 设置用户A编辑范围的权限A1:B2
- 设置用户B编辑范围的权限B2:C3
我访问过 ,但如上所述,它只添加了编辑器,其中 restriction
未应用于它们。
当您锁定整个 sheet 时,不幸的是无法解锁此 sheet
的子范围
原因是 sheet 的锁定比范围的解锁具有更高的访问优先级。
因此,您需要使用一种变通方法,将 sheet 分成不同的范围,并为每个范围定义不同的权限。
你的情况:
- 范围 1:
A1:A2
- 只有用户 A 有访问权限
- 范围 2:
B1
- 只有用户 A 有访问权限
- 范围 3:
B2
- 用户 A 和用户 B 具有访问权限
- 范围 4:
C2
- 只有用户 B 有访问权限
- 范围 5:
B3:C3
- 只有用户 B 有访问权限
sheet 的其余部分也需要按范围拆分,需要从中删除所有编辑器。
显然像这样拆分范围非常乏味,但是使用 RangeLists.
有助于稍微自动化该过程
我可以推荐你使用@Tanaike 开发的 RangeListApp
library。
更新
有一种叫做setUnprotectedRanges(ranges)的方法可以覆盖sheet保护。
样本:
var protection = sheet.protect().setDescription('Sample protected sheet');
var unprotected = sheet.getRange('B2:C5');
protection.setUnprotectedRanges([unprotected]);
请注意,此方法完全解除了保护,因此您仍需要为给定范围设置单独的保护,以确保只有 1 个用户可以编辑此范围。
场景很简单:您作为团队负责人在 Google Sheet 文档中管理团队出勤。每个人都应该能够编辑仅供他使用的行。所以这个人应该不能编辑同事的单元格,但仍然可以为自己输入一些数据。
Google Sheet 在 UI 中提供的选项是 restrictions
到:
- 保护整体sheet
- 保护整个 sheet 例外
- 保护 sheet 上的选定范围
所有这些选项都提供了对此 Restriction
add/edit 权限的能力(第一次使用时不清楚)。通过在这里设置用户自己实际上导致:
- 不应用
restriction
给他(所以用户仍然可以编辑sheet) - 用户可以编辑
restriction
(这有点符合预期)
问题是是否有某种方法可以防止多个用户在同一个 sheet 上输入多个单元格,但他的限制将适用于每个用户?
我正在寻找的解决方案可以是从开发人员或经典用户的角度。
我希望是这样的:
- 全部锁定sheet
- 设置用户A编辑范围的权限A1:B2
- 设置用户B编辑范围的权限B2:C3
我访问过 restriction
未应用于它们。
当您锁定整个 sheet 时,不幸的是无法解锁此 sheet
的子范围原因是 sheet 的锁定比范围的解锁具有更高的访问优先级。
因此,您需要使用一种变通方法,将 sheet 分成不同的范围,并为每个范围定义不同的权限。
你的情况:
- 范围 1:
A1:A2
- 只有用户 A 有访问权限 - 范围 2:
B1
- 只有用户 A 有访问权限 - 范围 3:
B2
- 用户 A 和用户 B 具有访问权限 - 范围 4:
C2
- 只有用户 B 有访问权限 - 范围 5:
B3:C3
- 只有用户 B 有访问权限
sheet 的其余部分也需要按范围拆分,需要从中删除所有编辑器。
显然像这样拆分范围非常乏味,但是使用 RangeLists.
有助于稍微自动化该过程我可以推荐你使用@Tanaike 开发的 RangeListApp
library。
更新
有一种叫做setUnprotectedRanges(ranges)的方法可以覆盖sheet保护。
样本:
var protection = sheet.protect().setDescription('Sample protected sheet');
var unprotected = sheet.getRange('B2:C5');
protection.setUnprotectedRanges([unprotected]);
请注意,此方法完全解除了保护,因此您仍需要为给定范围设置单独的保护,以确保只有 1 个用户可以编辑此范围。