我们在Googlesheets上有一个文件模板,该模板具有受保护的范围。我们希望复制该文件(file,进行复制),并为每个复制此文件的人保留受保护的范围,以便他们只能填充某些特定的单元格。问题是,每当有人制作副本时,他/她都会自动成为副本的所有者。这使得无法保护此副本不受此人的攻击(无论如何,所有者似乎都拥有对电子表格的完全访问权限)。有人可以解决此问题吗?
答案 0 :(得分:0)
prevent commenters and viewers from copying or downloading the file有一个选项:
如果用户只看到文件而不是看到文件,请考虑让他们提交一个表格,该表格将自动填充所需的工作表范围。
答案 1 :(得分:0)
如果我的理解正确,那么这个答案如何?
在上述情况下,我认为以下几点是瓶颈。
结果,为了使用脚本实现超出您的目标,该脚本需要由用户和您运行。
在我的解决方法中,使用2个脚本和2个帐户,可以达到上述目标。该解决方法的重点是使用2个Web Apps。请认为这只是几种解决方法之一。此解决方法的流程如下。
在此替代方法中,使用了两个Web应用程序,分别是Web应用程序“ A”和Web应用程序“ B”。
请创建2个独立脚本类型的项目。
首先,请部署Web应用程序“ B”,因为Web应用程序“ A”的脚本中使用了Web应用程序“ B”的URL。请复制以下脚本并将Web Apps部署为Execute the app as: **Me**
和Who has access to the app: **Anyone, even anonymous**
。并且,请复制此Web Apps“ B”的URL,并将其粘贴到Web Apps“ A”的脚本的url
中。
function doGet(e) {
var id = e.parameter.id;
if (id) {
var owner = Session.getActiveUser().getEmail();
var ss = SpreadsheetApp.openById(id);
var protectedRanges = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
protectedRanges.forEach(function(p) {
var removes = p.getEditors().filter(function(e) {return e.getEmail() != owner});
p.removeEditors(removes);
});
}
return ContentService.createTextOutput("Done");
}
请复制以下脚本并设置srcSpreadsheetId
和url
的变量。在这种情况下,url
是在Web应用程序“ B”处检索的URL。然后,请将Web Apps部署为Execute the app as: **User accessing the web app**
和Who has access to the app: **Anyone**
。并且请复制此Web应用程序的URL“ A”。该URL供用户访问。
function doGet() {
var srcSpreadsheetId = "###"; // Please set your source Spreadsheet ID.
var url = "###"; // Please set the URL of Web Apps B.
var srcSS = SpreadsheetApp.openById(srcSpreadsheetId);
var dstSS = srcSS.copy(srcSS.getName());
var file = DriveApp.getFileById(dstSS.getId()).setOwner(srcSS.getOwner().getEmail());
var res = UrlFetchApp.fetch(url + "?id=" + file.getId(), {muteHttpExceptions: true}); // Here, run the script of Web Apps "B".
return ContentService.createTextOutput(res.getContentText());
}
当用户使用上述脚本时,请使用户使用自己的浏览器访问Web应用程序“ A”的URL。当用户访问Web应用程序“ A”时,将显示Google的登录屏幕。登录Google后,将显示授权屏幕。通过授权,将运行Web应用程序“ A”的脚本,并由Web应用程序“ A”运行Web应用程序“ B”。授权只需要执行一次。
当用户浏览器中显示“完成”时,用户可以在根文件夹中看到复制的电子表格。
这样,您的Google云端硬盘中的电子表格便被复制到用户的Google云端硬盘中,并且电子表格的所有者也被修改为您,然后该用户从受保护范围的编辑器中删除。因此,用户将无法编辑受保护的范围。
https://script.google.com/macros/s/#####/exec
。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。