【问题标题】:Google Sheets Sheet Protection谷歌表格保护
【发布时间】:2015-01-14 18:25:47
【问题描述】:

我有一个包含多张工作表的电子表格。我将此电子表格与多个用户共享,我需要保护工作表,以便某些用户只能查看和编辑此电子表格的一张工作表。如下:

  • 用户 1(一位位置经理)需要查看和编辑工作表 1(即 地点的工资单)

  • 用户 2(另一个位置管理员)需要查看和编辑工作表 2 (该地点的工资单),但不是表 1

  • 用户 3(区域经理)需要查看和编辑工作表 1 和 表 2,但不是表 3 和 4。

  • 用户 4(区域经理)需要能够查看和编辑表格 1, 2、3 和 4。

Google 表格仅提供防止编辑的功能,但我想知道是否有任何第三方应用程序、脚本或解决方法可以提供这种防止查看的功能?

【问题讨论】:

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


    【解决方案1】:

    简短回答 = 否。如果您无法通过 API 或脚本找到此方法,则第三方无法提供它(他们可以访问与我们相同的 API)。

    稍长一点的解决方案:您可以创建一个包含所有这些数据的主电子表格,然后再创建 4 个其他电子表格(每个用户一个),将数据从正确的工作表中提取到他们的个人电子表格中。

    对于稍长的解决方案,您正在查看特定用户电子表格中的'onOpen' trigger,因此当他们打开电子表格时,它会将正确的工作表从主电子表格复制到他们刚刚打开的电子表格中。 'openByID'(允许您获取另一个电子表格)和'copyTo'(将另一个电子表格工作表复制到当前电子表格)等方法是您的朋友。

    一个非常非常简单的版本可能是:

    var ss = SpreadsheetApp.openById("ID-FOR-MASTER-SHEET");
    var sheet = ss.getSheets()
    var destination = SpreadsheetApp.openById("ID-FOR-USERS-SHEET");
    sheet[0].copyTo(destination);
    

    否则,如果您有权访问 Google 电子表格,则可以随时查看其中的所有表格。

    【讨论】:

    • 稍长的解决方案听起来可能是一个很好的解决方法。你碰巧有一篇关于如何做到这一点的文章吗?否则,我可以解决这个问题,我只是想知道是否可以使用一些东西来简化流程。
    • 我已经稍微扩展了我的答案,希望能让您大致了解我的意思,以及如何实现它。不幸的是,我不相信有分步指南,我只是想这就是我将如何实施它。如果有任何不清楚的地方,请告诉我。
    • 太完美了!非常感谢你!这将使我在尝试解决这个问题时有一个良好的开端。
    • 很高兴我能帮上忙。请考虑接受我的回答 (stackoverflow.com/help/someone-answers),因为它可能会在未来帮助其他人(我会获得虚假的互联网积分作为奖励)。
    • 我喜欢这个建议,但想知道您将如何将副本同步到主服务器?拥有一个从其他工作表复制/导入/等用于查看的主控很好,但我不会使用主控作为官方数据存储源。否则,您需要在编辑单个工作表时将数据写入主控表。有相同数据的重复 storage 位置是不好的。这就是为什么数据库使用查询来显示数据,并将存储分解为表格的原因。
    【解决方案2】:

    想法

    将选项卡拆分为单独的工作表。创建一个文件夹并将所有文档放入其中。仅与需要它的所有者共享每张工作表,然后与区域经理共享文件夹。

    奖金

    试试 importrange 命令。

    你可以这样做:=IMPORTRANGE(A1,A2)

    • A1 = 工作表网址
    • A2 = Tab!Range 即 Store1!A1:Q500

    使用它创建一个主表,从所有单独的商店中提取数据,这可以为区域经理提供一个简单的快照。您甚至可以镜像原始选项卡结构。

    【讨论】:

      【解决方案3】:

      关于独立工作簿架构和 ImportRange 的评论

      我会告诫不要将应用程序拆分为单独的工作簿。使用 ImportRange() 需要您将共享权限设置为“任何有链接的人”,而不是更安全的“仅限特定用户”。

      由于这个安全问题,我刚刚将费用授权应用程序从单独的(六个)工作簿重新设计为单个主工作簿。

      替代方案:内容服务

      在我的应用程序中,我使用内容服务来执行只有数据库所有者才能执行的编辑操作。授权用户只能编辑特定工作表中的特定范围。然后为了施展魔法,他们使用作为数据库所有者运行的内容服务执行宏。

      控制查看

      可以想象,您可以对工作簿进行编程以根据用户身份隐藏工作表。这要求他们对自己进行身份验证(例如,您不能在 onOpen() 中执行此操作。问题是当您让协作者同时查看工作簿时。看看 Sheets 如何处理同一文档的并发视图会很有趣。了解 Google ,我敢打赌它会起作用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        相关资源
        最近更新 更多