使用脚本中的相同用户复制Google电子表格+共享

时间:2013-08-15 15:05:53

标签: permissions google-apps-script google-sheets google-docs

我已经在互联网的远端搜索了几天,但似乎找不到我的问题的解决方案。我对编程知识有限,但是如果我能让它工作,它就会做很棒的事情。

解释:我需要使用电子表格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;
}

1 个答案:

答案 0 :(得分:1)

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

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