首页 > 解决方案 > 是否可以在 Google 表格中为每个用户的选定单元格设置权限?

问题描述

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

Google 表格在 UI 中提供的选项restrictions用于:

  1. 保护整张纸
  2. 保护整张纸异常
  3. 保护工作表上的选定范围

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


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

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

我期待的是:

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

我访问过如何保护谷歌表格中每个特定用户的范围?,但如上所述,它只添加了编辑器,其中restriction不应用于它们。

标签: google-sheetsgoogle-sheets-api

解决方案


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

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

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

在你的情况下:

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

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

显然,像这样拆分范围非常繁琐,但是使用RangeLists有助于使过程自动化一点。

我可以推荐你使用 @Tanaike 开发的RangeListApp 库。

更新

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

样本:

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

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


推荐阅读