with IMPORTRANGE SpreadSheet A、B、C 等 请求访问权限以从 SpreadSheet 1 中提取数据(图 1)。示例:
=IMPORTRANGE("SpreadSheet 1"; "Sheet!A1")
我想从电子表格A中删除访问(撤销权限),以从电子表格1中提取数据(图2)撤消允许对图片1的访问,以撤销授予电子表格 A 从电子表格 1 提取数据的权限
这只是一个简化的例子,因为实际上我有超过200个电子表格连接到1个(实际上是2个)数据库电子表格,这就是为什么我想撤销权限,有多少个电子表格可以访问一个电子表格我已经多次达到这个限制了
真实电子表格的图片,以帮助理解我的部分代码,脚本将在请求访问的同一电子表格上运行
我可能是错的,但我有一个旧脚本,我认为曾经有用
function removePermission() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ss_c = ss.getSheetByName('Config'); var currentSheetId = ss.getId(); var targetId = ""; if (ss_c.getRange("B6").getValue() == 1) { targetId = ss_c.getRange("D6").getValue(); } else if (ss_c.getRange("B6").getValue() == 2) { targetId = ss_c.getRange("D7").getValue(); } var currentFile = DriveApp.getFileById(currentSheetId); var targetFile = DriveApp.getFileById(targetId); var targetPermissions = targetFile.getPermissions(); for (var i = 0; i < targetPermissions.length; i++) { var permission = targetPermissions[i]; if (permission.getType() == "user" && permission.hasAccess()) { currentFile.removeEditor(permission.getEmail()); // or the next one // targetFile.removeEditor(permission.getEmail()); } } }
但现在它显示错误TypeError: targetFile.getPermissions is not a function
所以我尝试用我搜索的内容进行修改
function test() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ss_c = ss.getSheetByName('Config'); var currentSheetId = ss.getId(); var targetId = ""; if (ss_c.getRange("B6").getValue() == 1) { targetId = ss_c.getRange("D6").getValue(); } else if (ss_c.getRange("B6").getValue() == 2) { targetId = ss_c.getRange("D7").getValue(); } var currentFile = DriveApp.getFileById(currentSheetId); var targetFile = DriveApp.getFileById(targetId); var targetEditors = targetFile.getEditors(); var currentEditors = currentFile.getEditors(); var activeUserEmail = Session.getActiveUser().getEmail(); for (var i = 0; i < targetEditors.length; i++) { var editor = targetEditors[i]; var editorEmail = editor.getEmail(); // Check if the editor exists in the current file before removing if (editorEmail !== activeUserEmail && currentEditors.some(e => e.getEmail() === editorEmail)) { targetFile.removeEditor(editorEmail); } } }
通过,但不起作用
我不熟悉编辑器在这种情况下的具体工作方式,并且搜索我找不到相关的问题和解决方案
我是所有者和唯一的用户,不确定,但它与文件而不是用户相关,感谢帮助,谢谢
我相信您的目标如下。
IMPORTRANGE
函数。IMPORTRANGE
的多项授权。问题和解决方法:
查看了直接取消Spreadsheet的
IMPORTRANGE
授权的方法。不幸的是,我找不到该方法。但是,我们已经知道,当使用端点时,授权过程可以由脚本运行。 Ref 我认为这可能可以在您的情况下用作解决方法。此解决方法的流程如下。IMPORTRANGE
,但您要撤销的电子表格除外。按照此流程,通过撤销您想要的特定电子表格来获取 Google 电子表格。
但是,在此解决方法中,电子表格 ID 与原始 ID 不同,因为原始电子表格已被复制。所以,我不确定这对你的实际情况是否有用。所以,我只是提出这个解决方法。
当上述流程反映在示例脚本中时,它变成如下。
示例脚本:
请将以下脚本复制并粘贴到原始电子表格的脚本编辑器中,并设置
spreadsheetIdsOfdeletePermission
并保存脚本。注意:
Utilities.sleep 的循环中使用
。UrlFetchApp.fetch
而不是UrlFetchApp.fetchAll
参考文献: