使用 IMPORTRANGE 删除一个电子表格从另一电子表格提取数据的权限
P粉511985082
P粉511985082 2024-03-30 23:27:35
[JavaScript讨论组]

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);
    }
  }
}

通过,但不起作用

我不熟悉编辑器在这种情况下的具体工作方式,并且搜索我找不到相关的问题和解决方案

我是所有者和唯一的用户,不确定,但它与文件而不是用户相关,感谢帮助,谢谢

P粉511985082
P粉511985082

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号