这是我的问题。我正在共享电子表格文档中生成一些工作表。它是通过链接共享的。这个想法是锁定除电子表格所有者之外的所有人。所有要锁定的范围都已被以下代码锁定:
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]);
问题保持不变:
setUnprotectedRanges()
如果我将共享链接设置为“查看”,尽管有调用,我也无法修改任何内容。一切都被锁定了。- 如果我将共享链接设置为“编辑”,我可以看到该工作表已正确锁定,但该范围除外(如从“数据”菜单打开“受保护的范围和工作表”时所见),但仍然所有使用该链接的人都可以修改工作表中的任何内容。
我已经为这个问题苦苦挣扎了好几天,而且我已经没有主意了。
我真的尝试了很多东西。因此,如果您知道如何正确执行此操作,您能否提供一段工作代码/共享文档示例来完成此操作?比方说:
- 创建两个具有“锁定”描述的范围(例如:第一行和第一列)
- 在“锁定”范围上设置正确的保护(仅限所有者版本)
- 任何知道链接的人都可以修改除锁定范围之外的所有范围
- 通过链接使用共享文档
任何帮助将不胜感激 !真的 !
注意:此代码是用 Typescript 编写的,因为我使用 CLASP 将所有内容转换为 Google Apps Script 的代码。