0

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

所有其他范围(任何人都可以修改)都没有调用protect()它们。因此,我使用了Protection 类中的示例,并附带了以所有者身份在调试模式下运行的以下代码:

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 Script 的代码。

4

0 回答 0