通过链接和不受保护的范围共享电子表格

时间:2019-02-24 18:10:06

标签: google-apps-script spreadsheet lockdown

这是我的问题。我在共享的电子表格文档中生成了一些表格。通过链接共享。想法是锁定除电子表格所有者以外的所有人。所有要锁定的范围已由以下代码锁定: range.protect().setDescription("Locked");

所有其他范围(任何人都可以修改)保留下来,而无需在它们上调用protect()。 因此,我使用了Protection class上的示例,并附带了以所有者身份在调试模式下运行的这段代码:

let rangeProtect = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (let i = 0; i < rangeProtect.length; i++) {
    let protection = rangeProtect[i];
    if (protection.canEdit() && (protection.getDescription() == "Locked")) {
        let editors = ss.getEditors();
        for (let j = 0; j < editors.length; j++) {
            ss.removeEditor(editors[j]);
        }
        // Add only owner
        ss.addEditor(ownerEmail);
    }
}

不幸的是,这不起作用。使用该链接的每个人仍然可以编辑所有内容。但是,如果我手动将名称“锁定”的每个受保护范围修改为“仅限所有者”,那么它就可以工作...

那么你能告诉我我在做什么错吗?

我也尝试过这种方法:

let protection = sheet.protect().setDescription('Locked');
let unprotected = sheet.getRange("B1:C10");
protection.setUnprotectedRanges([unprotected]);

问题仍然存在:

  1. 如果我将共享链接设置为“查看”,则尽管进行了setUnprotectedRanges()调用,但无法进行任何修改。一切都已锁定。
  2. 如果我将共享链接设置为“编辑”,则可以看到工作表已被正确锁定,但该范围除外(如从“数据”菜单中打开“受保护的范围和工作表”所示),但仍然所有人链接可以修改工作表中的任何内容。

几天来我一直在努力解决这个问题,但我的想法已荡然无存。

我真的尝试了很多事情。因此,如果您知道如何正确执行此操作,是否可以提供一段工作代码/共享文档示例来完成此操作?假设:

  1. 使用“已锁定”描述创建两个范围(例如:第一行和第一列)
  2. 在“锁定”范围上设置正确的保护(仅限所有者编辑)
  3. 知道链接的任何人都可以修改除锁定范围之外的所有内容
  4. 通过链接使用共享文档

任何帮助将不胜感激!真的!

注意:这段代码是用Typescript编写的,因为我正在使用CLASP将所有内容都转换为Google Apps脚本的代码。

0 个答案:

没有答案