简体   繁体   English

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

[英]Copy Google Spreadsheet + Share with same users in script

I have searched the far reaches of the internet for a couple days now, but cannot seem to find a solution to my issue. 我已经在互联网的远端搜索了几天,但似乎无法找到我的问题的解决方案。 I have limited knowledge of programming, but if I can get this to work, it is going to do wonderful things. 我对编程知识有限,但是如果我能让它工作,它就会做很棒的事情。

EXPLANATION: I need to make a copy of a template spreadsheet, using a script inside spreadsheet A and copy over all the permissions of the template into the copy (specifically the name and protected ranges). 解释:我需要使用电子表格A中的脚本制作模板电子表格的副本,并将模板的所有权限复制到副本中(特别是名称和受保护的范围)。 I am using SheetSpider. 我正在使用SheetSpider。

As of right now, I can create the duplicate of the template, but SheetSpider seems to drop the permissions that the template has, and rewrites them with users that you define during the setup process. 截至目前,我可以创建模板的副本,但SheetSpider似乎删除了模板具有的权限,并使用您在设置过程中定义的用户重写它们。 Instead, I would just like to copy the permissions of the template file. 相反,我只想复制模板文件的权限。 It seems to be tricky because a regular copy of the spreadsheet still does not bring over the permissions for the name and protected range settings like it would if you go to file > copy spreadsheet and check the box that says "and share with the same users" which DOES retain protected range settings. 这似乎很棘手,因为电子表格的常规副本仍然没有带来名称和受保护范围设置的权限,就像你去文件>复制电子表格并选中“并与同一用户共享”的框一样“它保留了受保护的范围设置。

Again, I have a very limited knowledge of programming, but I think I have pinpointed the lines that seem to drop and reset the permissions. 同样,我对编程知识非常有限,但我认为我已经找到了似乎丢失并重置权限的行。 I have tried playing with the below for days now to get it to leave the permissions alone, but to no avail. 我已经尝试使用以下几天来让它单独留下权限,但无济于事。

Any help or guidance would be greatly appreciated! 任何帮助或指导将不胜感激!

Thanks! 谢谢!

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

Here a script that will copy the spreadsheet with permissions when run. 这是一个脚本,可以在运行时复制带有权限的电子表格。 However, it will turn commentators into viewers. 但是,它会将评论员变成观众。 This is avoidable with more code but is not very easy because there is no file method for getting commentators. 这可以通过更多代码来避免,但不是很容易,因为没有文件方法来获取评论员。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM