Google apps script 复制文件时保持受保护的范围
我们在Googlesheets上有一个文件模板,它有受保护的范围。我们希望复制此文件(文件,制作副本),并为制作此文件副本的每个人保留保护范围,以便他们只能填充某些特定单元格。问题是,每当有人制作副本时,他/她就会自动成为副本的所有者。这使得不可能针对此人保护此副本的范围(无论发生什么情况,所有者似乎都可以完全访问电子表格)。有人能解决这个问题吗?有一个选项:Google apps script 复制文件时保持受保护的范围,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我们在Googlesheets上有一个文件模板,它有受保护的范围。我们希望复制此文件(文件,制作副本),并为制作此文件副本的每个人保留保护范围,以便他们只能填充某些特定单元格。问题是,每当有人制作副本时,他/她就会自动成为副本的所有者。这使得不可能针对此人保护此副本的范围(无论发生什么情况,所有者似乎都可以完全访问电子表格)。有人能解决这个问题吗?有一个选项: 如果用户不查看文件,而只填充它——考虑让它们提交一个表格,它将自动填充所需的页的范围。 < P> 有一个选项:>/P> 如果用户不查
如果用户不查看文件,而只填充它——考虑让它们提交一个表格,它将自动填充所需的页的范围。
< P> <强>有一个选项:>/P>如果用户不查看文件,而只填充它——考虑让它们提交一个表格,它将自动填充所需的页的范围。
UL>- 您的电子表格有几个受保护的范围
- 您的电子表格将与用户共享
- 用户没有与您共享自己的文件夹
- 当您的Google Drive中的电子表格复制到用户的Google Drive时,它需要由用户的帐户运行
- 当电子表格被复制到用户的Google Drive by user时,受保护范围的所有者将成为用户。因此,用户可以编辑受保护的范围。并且用户无法通过用户从编辑器中删除该用户。
- 为了使用户不编辑受保护的范围,需要更改电子表格的所有者,然后将用户从受保护范围的编辑器中删除
- 这里又出现了两个问题。
- 为了将电子表格的所有者更改为您,需要由用户帐户运行该电子表格
- 要将用户从受保护范围的编辑器中删除,必须由您的帐户运行,该帐户不是用户的帐户
- 在这种情况下,Web应用程序以用户身份执行。
- 在这种情况下,Web应用程序将按您的身份执行。
- 一种是网络应用程序“A”
- 另一个是网络应用程序“B”
以执行该应用为:*我**
和谁有权访问该应用:*任何人,甚至匿名**
。请复制此Web应用程序“B”的URL,并将其粘贴到Web应用程序“A”脚本的URL
Web应用程序“A”的独立脚本:
请复制以下脚本并设置srcSpreadsheetId
和url
的变量。在本例中,url
是在Web应用程序“B”中检索到的url。然后,请将Web应用部署为执行应用为:*访问Web应用的用户**
和有权访问该应用的用户:*任何人**
。请复制此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应用程序的URL“A”。当用户访问Web应用程序“A”时,将显示Google的登录屏幕。通过登录谷歌,将显示授权屏幕。通过授权,Web应用程序“A”的脚本运行,Web应用程序“B”由Web应用程序“A”运行。授权只需执行一次
当用户浏览器中显示“完成”时,用户可以在根文件夹中看到复制的电子表格
这样,您的Google驱动器中的电子表格将复制到用户的Google驱动器,电子表格的所有者将被修改为您,然后用户将从受保护范围的编辑器中删除。因此,用户无法编辑受保护的范围
如何部署Web应用程序:
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());
}