5

我已经在互联网上搜索了几天,但似乎无法找到解决我的问题的方法。我对编程的了解有限,但如果我能做到这一点,它会做很多很棒的事情。

说明:我需要使用电子表格 A 中的脚本制作模板电子表格的副本,并将模板的所有权限复制到副本中(特别是名称和受保护范围)。我正在使用 SheetSpider。

截至目前,我可以创建模板的副本,但 SheetSpider 似乎放弃了模板具有的权限,并使用您在设置过程中定义的用户重写它们。相反,我只想复制模板文件的权限。这似乎很棘手,因为电子表格的常规副本仍然不会带来名称和受保护范围设置的权限,就像您转到文件 > 复制电子表格并选中“并与相同用户共享”框一样" 保留受保护的范围设置。

同样,我的编程知识非常有限,但我想我已经查明了似乎删除并重置权限的行。我已经尝试使用以下几天来让它不理会权限,但无济于事。

任何帮助或指导将不胜感激!

谢谢!

function checkFixFileACLs(file, approvedViewers, approvedEditors) {
  var viewers = file.getViewers().join(",");
  viewers = viewers.split(",");
  var editors = file.getEditors().join(",");
  editors = editors.split(",");
  viewers = arr_diff(editors, viewers);
  var owner = file.getOwner().toString();
  var fileKey = file.getId();
  var driveFile = DriveApp.getFileById(fileKey);
  var currViewers = [];
  for (var k=0; k<viewers.length; k++) {
    if ((viewers[k]!='')&&(approvedViewers.indexOf(viewers[k].toLowerCase())==-1)&&(approvedEditors.indexOf(viewers[k].toLowerCase())==-1)&&(viewers[k]!=owner)) {
      try {
        call(function() {driveFile.removeViewer(viewers[k].toLowerCase());});
      } catch(err) {
        Logger.log(err.message);
      }
    } else {
      currViewers.push(viewers[k].toLowerCase());
    }
  }
  for (var k=0; k<approvedViewers.length; k++) {
    if ((approvedViewers[k]!='')&&(approvedViewers[k])) {
      if (currViewers.indexOf(approvedViewers[k])==-1) {
        try {
          call(function() {driveFile.addViewer(approvedViewers[k].toLowerCase());});
        } catch(err) {
          Logger.log(err.message);
        }
      }
    }
  }
  var currEditors = [];
  for (var k=0; k<editors.length; k++) {
    if ((editors[k]!='')&&(approvedEditors.indexOf(editors[k].toLowerCase())==-1)&&(editors[k]!=owner)) {
      try {
        call(function() {driveFile.removeEditor(editors[k].toLowerCase());});
      } catch(err) {
        Logger.log(err.message);
      }
    } else {
      currEditors.push(editors[k].toLowerCase().replace(/\s+/g, ''));
    }
  }
  for (var k=0; k<approvedEditors.length; k++) {
    if ((approvedEditors[k]!='')&&(approvedEditors[k])) {
      if (currEditors.indexOf(approvedEditors[k].toLowerCase())==-1) {
        try {
          call(function() {driveFile.addEditor(approvedEditors[k].toLowerCase().replace(/\s+/g, ''));});
        } catch(err) {
          Logger.log(err.message);
        }
      }
    }
  }
  return;
}
4

1 回答 1

1

这是一个脚本,它将在运行时复制具有权限的电子表格。但是,它将把评论员变成观众。使用更多代码可以避免这种情况,但不是很容易,因为没有获取评论员的文件方法。

function myFunction() {

  var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy();
  var editors = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getEditors();
  for (var i = 0; i<editors.length;i++) {
    file.addEditor(editors[i])
  }
  var viewers = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getViewers();
  for (var i = 0; i<viewers.length;i++) {
    file.addViewer(viewers[i])
  }
}
于 2015-02-16T04:34:30.497 回答