Permissions 复制谷歌电子表格+;在脚本中与相同的用户共享
我已经在互联网上搜索了几天了,但似乎找不到解决我问题的办法。我对编程的知识有限,但如果我能让它工作起来,它会做很多很棒的事情 说明:我需要使用电子表格中的脚本制作模板电子表格的副本,并将模板的所有权限复制到副本中(特别是名称和保护范围)。我用的是蜘蛛片 现在,我可以创建模板的副本,但是SheetSpider似乎放弃了模板拥有的权限,并使用您在安装过程中定义的用户重写了这些权限。相反,我只想复制模板文件的权限。这似乎有点棘手,因为电子表格的常规副本仍然不会像在“文件”>“复制电子表格”中选中“与相同用户共享”复选框时那样,为名称和受保护范围设置带来权限,而该复选框会保留受保护范围设置 同样,我对编程的了解非常有限,但我想我已经指出了似乎要删除和重置权限的行。我已经试着玩下面的几天了,现在让它离开权限,但没有任何效果 任何帮助或指导都将不胜感激 谢谢Permissions 复制谷歌电子表格+;在脚本中与相同的用户共享,permissions,google-apps-script,google-sheets,google-docs,Permissions,Google Apps Script,Google Sheets,Google Docs,我已经在互联网上搜索了几天了,但似乎找不到解决我问题的办法。我对编程的知识有限,但如果我能让它工作起来,它会做很多很棒的事情 说明:我需要使用电子表格中的脚本制作模板电子表格的副本,并将模板的所有权限复制到副本中(特别是名称和保护范围)。我用的是蜘蛛片 现在,我可以创建模板的副本,但是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;
}
函数checkFixFileACL(文件、ApprovedViewer、ApprovedEditor){
var viewers=file.getViewers().join(“,”);
viewers=viewers.split(“,”);
var editors=file.getEditors().join(“,”);
editors=editors.split(“,”);
查看器=arr_diff(编辑器、查看器);
var owner=file.getOwner().toString();
var fileKey=file.getId();
var driveFile=DriveApp.getFileById(fileKey);
var=[];
对于(var k=0;k这里是一个脚本,它将在运行时复制具有权限的电子表格。但是,它会将评论员变成查看器。这可以通过更多代码避免,但不是很容易,因为没有获取评论员的方法
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])
}
}
函数myFunction(){
var file=DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy();
var editors=DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getEditors();
对于(var i=0;i)错误的行在哪里?另外,如果您将一个文件移动到共享文件夹,它将自动与其他用户共享,您能利用这个事实吗?虽然这是很久以前的事了,但它是否得到了修复?