将电子表格复制到特定文件夹并从副本中删除查看者

copy spreadsheet to a specific folder and remove viewers from the copy

我正在尝试将活动电子表格复制到特定文件夹,然后从复制的电子表格中删除所有编辑者并将我自己保留为所有者。

这是我的代码:

//Save Spreadsheet in selected folder 

function freezeSS(vname,option) {

if (vname != ""){


var mainSs =           SpreadsheetApp.getActiveSpreadsheet();
var SSID =             mainSs.getId();
var CopyDate =         Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yy-HH:mm"); // Function Date + Format
var file =             DriveApp.getFileById(SSID);


if (option == "Public") {
    var folder = DriveApp.getFolderById("0B_EpGZ420rEUfk1mZ2Z3RmFKUk9xaGd1bm1CdGhmZ0FCbTdVT2p2MUlJY3NZUTV0MTR0LTQ");
    file.makeCopy(vname + "_" + CopyDate, folder);
}

else {

    var folder =       DriveApp.getFolderById("0B_EpGZ420rEUfk9jTl81NXNVOXNhRDF2N2R4c1FGTW9wQTB5Q3dNS25nd1NEejBTWWd1RFk");
    var backup =       file.makeCopy(vname + "_" + CopyDate, folder);
    var editors =      backup.getEditors().getEmail();
    Logger.log(editors);
    var permision =    backup.removeEditor(editors);

} 
} return false;
}

一切正常,但我在删除编辑器时遇到问题。我总是遇到错误,但仍然使用与原始电子表格中相同的编辑器。

如文档所述,您有 2 个 removeEditor() 选项:

removeEditor(user)

removeEditor(emailAddress)

你两者都没有使用,你需要在没有 getEmail() 的 getEditors() 中创建一个循环,这个也会进入循环,因此:

var editors =      backup.getEditors();
for( i in editors ){
  var email = editors[i].getEmail();
  var permision = backup.removeEditor(email);
}

或更短:

var editors = backup.getEditors();
    for( i in editors )
      var permision = backup.removeEditor(editors[i]);

顺便说一句,这有据可查,从那里按 ctrl+c ctrl+v 几乎可以解决您的问题,请多花点时间fiddle。

https://developers.google.com/apps-script/reference/drive/user#getEmail();