Google 应用程序脚本对共享文件夹中创建的文件的权限
Google apps script Permissions on created file in shared folder
我有一个脚本可以在共享 Google 驱动器文件夹中创建一个文件,这是脚本:
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
操作时,弹出此错误:
You do not have authorization to perform that action.
关于如何解决这个问题的任何想法? :)
谢谢!
编辑: 我可以和其他用户一起手动删除驱动器中的文件。
我看过 this 篇文章,但我完全不同意问题“过于局部化”的结论。在 Google 上环顾四周,你会发现有同样问题但没有好的解决方案的案例。
此时的解决方法:
- 重命名文件
- 将其移动到另一个文件夹
- 在旧文件夹中创建新文件
我不会删除这个post所以人们可以在这里添加其他想法。
您只能删除 您拥有的文件。当您手动删除文件时(使用 GUI 将文件删除),看起来您已将文件删除,但实际上并没有在其上设置垃圾标记。相反,您是将其从您自己的 Google 驱动器中的视图中删除,而不影响其他任何人。所有者仍然看到它与您共享,并且任何其他协作者不受影响。事实上,如果您按全名搜索文件,或者使用 "Recent" 文件列表等备用视图之一,或者使用文件的 URL.[=14,您仍然可以看到该文件=]
要从脚本中获得相同的效果,请使用 removeFile()
。
这是一个实用程序,它会以不同于协作者的方式处理文件,将其丢弃或删除。
/**
* Remove the given file from view in the user's Drive.
* If the user is the owner of the file, it will be trashed,
* otherwise it will be removed from all of the users' folders
* and their root. Refer to the comments on the removeFile()
* method:
*
* https://developers.google.com/apps-script/reference/drive/drive-app#removeFile(File)
*
* @param {File} file File object to be trashed or removed.
*/
function deleteOrRemove( file ) {
var myAccess = file.getAccess(Session.getActiveUser());
if (myAccess == DriveApp.Permission.OWNER) {
// If I own the file, trash it.
file.setTrashed(true);
}
else {
// If I don't own the file, remove it.
var parents = file.getParents();
while (parents.hasNext()) {
// Remove the file from the current folder.
parents.next().removeFile(file);
}
// Remove the given file from the root of the user's Drive.
DriveApp.removeFile(file);
}
}
示例:
function test_deleteOrRemove() {
var files = DriveApp.getFilesByName('536998589.mp3');
while (files.hasNext()) {
var file = files.next();
deleteOrRemove( file );
}
}
我有一个脚本可以在共享 Google 驱动器文件夹中创建一个文件,这是脚本:
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
操作时,弹出此错误:
You do not have authorization to perform that action.
关于如何解决这个问题的任何想法? :)
谢谢!
编辑: 我可以和其他用户一起手动删除驱动器中的文件。 我看过 this 篇文章,但我完全不同意问题“过于局部化”的结论。在 Google 上环顾四周,你会发现有同样问题但没有好的解决方案的案例。
此时的解决方法:
- 重命名文件
- 将其移动到另一个文件夹
- 在旧文件夹中创建新文件
我不会删除这个post所以人们可以在这里添加其他想法。
您只能删除 您拥有的文件。当您手动删除文件时(使用 GUI 将文件删除),看起来您已将文件删除,但实际上并没有在其上设置垃圾标记。相反,您是将其从您自己的 Google 驱动器中的视图中删除,而不影响其他任何人。所有者仍然看到它与您共享,并且任何其他协作者不受影响。事实上,如果您按全名搜索文件,或者使用 "Recent" 文件列表等备用视图之一,或者使用文件的 URL.[=14,您仍然可以看到该文件=]
要从脚本中获得相同的效果,请使用 removeFile()
。
这是一个实用程序,它会以不同于协作者的方式处理文件,将其丢弃或删除。
/**
* Remove the given file from view in the user's Drive.
* If the user is the owner of the file, it will be trashed,
* otherwise it will be removed from all of the users' folders
* and their root. Refer to the comments on the removeFile()
* method:
*
* https://developers.google.com/apps-script/reference/drive/drive-app#removeFile(File)
*
* @param {File} file File object to be trashed or removed.
*/
function deleteOrRemove( file ) {
var myAccess = file.getAccess(Session.getActiveUser());
if (myAccess == DriveApp.Permission.OWNER) {
// If I own the file, trash it.
file.setTrashed(true);
}
else {
// If I don't own the file, remove it.
var parents = file.getParents();
while (parents.hasNext()) {
// Remove the file from the current folder.
parents.next().removeFile(file);
}
// Remove the given file from the root of the user's Drive.
DriveApp.removeFile(file);
}
}
示例:
function test_deleteOrRemove() {
var files = DriveApp.getFilesByName('536998589.mp3');
while (files.hasNext()) {
var file = files.next();
deleteOrRemove( file );
}
}