Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在共享文件夹中创建的文件上的Google apps脚本权限_Google Apps Script_Permissions_Google Drive Api_File Sharing - Fatal编程技术网

Google apps script 在共享文件夹中创建的文件上的Google apps脚本权限

Google apps script 在共享文件夹中创建的文件上的Google apps脚本权限,google-apps-script,permissions,google-drive-api,file-sharing,Google Apps Script,Permissions,Google Drive Api,File Sharing,我有一个脚本,可以在共享的Google Drive文件夹中创建一个文件,以下是脚本: var spr = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Klantenlijst'); var data = spr.getDataRange().getValues(); var klanNumbers = data; //some var declared before this piece of code var

我有一个脚本,可以在共享的Google Drive文件夹中创建一个文件,以下是脚本:

  var spr = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Klantenlijst'); 
  var data = spr.getDataRange().getValues(); 
  var klanNumbers = data; //some var declared before this piece of code
  var file = DriveApp.createFile(fileName, JSON.stringify(klanNumbers));
这个文件需要经常更新,为此我删除了现有的文件并创建了一个新的文件来替换它(使用新数据)。问题是,当我尝试以文件所有者以外的用户身份执行
setTrashed
操作时,会弹出以下错误:

您没有执行该操作的授权

关于如何解决这个问题有什么想法吗?:)

谢谢

编辑:我可以与其他用户一起手动删除驱动器中的文件。 我看过这篇文章,但我完全不同意这个问题“过于本地化”的结论。在谷歌上到处看看,你会发现同样的问题没有一个像样的解决方案

目前的解决办法:

  • 重命名文件
  • 将其移动到另一个文件夹
  • 在旧文件夹中创建新文件
我不会删除这篇文章,这样人们就可以在这里添加其他想法。

你只能丢弃你自己的文件。当您手动删除该文件(使用GUI将该文件丢弃)时,看起来您已将该文件丢弃,但实际上并没有在其上设置丢弃标志。相反,您正在自己的谷歌硬盘中将其从视图中删除,而不会影响其他任何人。所有者仍然看到它与您共享,并且任何其他合作者都不受影响。事实上,如果您按文件全名搜索该文件,或使用“最近”文件列表等备选视图之一,或使用该文件的URL,仍然可以看到该文件

要从脚本中获得相同的效果,请使用

这里有一个实用程序,它将以不同的方式对待文件所有者和合作者,要么将其丢弃,要么将其删除

/**
*从用户驱动器中的视图中删除给定文件。
*如果用户是该文件的所有者,则该文件将被丢弃,
*否则,它将从所有用户文件夹中删除
*还有它们的根。请参阅removeFile()上的注释
*方法:
*
*   https://developers.google.com/apps-script/reference/drive/drive-app#removeFile(档案)
*
*@param{File}File要丢弃或删除的文件对象。
*/
函数delete或remove(文件){
var myAccess=file.getAccess(Session.getActiveUser());
if(myAccess==DriveApp.Permission.OWNER){
//如果我拥有这个文件,就把它扔掉。
file.setTrashed(true);
}
否则{
//如果我不拥有该文件,请将其删除。
var parents=file.getParents();
while(parents.hasNext()){
//从当前文件夹中删除该文件。
parents.next().removeFile(文件);
}
//从用户驱动器的根目录中删除给定文件。
DriveApp.removeFile(文件);
}
}
例如:

功能测试\u deleteOrRemove(){
var files=DriveApp.getFilesByName('536998589.mp3');
while(files.hasNext()){
var file=files.next();
删除或删除(文件);
}
}

是的,你说得对。它不允许您在非所有者的位置丢弃文件。WRT手动删除文件(使用GUI丢弃文件):您实际上没有在该文件上设置垃圾标志,而是拒绝您的共享权限。(所有者仍然将您视为合作者,但该文件不再对您可见,即使在您的垃圾箱中也不可见。如果您有指向该文件的链接,例如在电子邮件中,您仍然可以访问该文件。)您可以尝试删除共享特权。我正要编写类似于mogsdad的内容。我最近还没有测试过,但我很确定,如果另一个编辑器破坏了这个文件,它不会像删除共享权限那样无害。我记得它也会从文件夹中删除文件,所有者只能在“所有文件”视图中找到它(或者在根目录中,但我认为它是无根的)。