Google Apps 脚本 - 无法对共享驱动器中的元素进行操作
Google Apps Script - Impossible operation with an element inside a shared drive
我有件事需要你的帮助。
我做了一个功能,其目标是复制模板文件并将其放入共享驱动器的文件夹中。问题是程序 returns :
"Exception: This operation cannot be performed on an item in a shared Drive"
但是,我拥有该共享驱动器的所有权限,所以我不明白。
我做了一些调整,发现 removeFile
和 addFile
是问题的一部分。如果我不 运行 它们,则会创建文件夹并制作副本。但我仍然需要移动文件。
我希望有人能帮助我。
PS : 你可以在下面找到我的代码。
function makeCopyFile(folderID, fileID, newName) {
var getFolder = DriveApp.getFolderById(folderID);
var file = DriveApp.getFileById(fileID);
var copyFile = file.makeCopy();
var newFile = copyFile.setName(newName);
// Remove the file from all parent folders
var parents = newFile.getParents();
while (parents.hasNext()) {
var parent = parents.next();
parent.removeFile(newFile);
}
getFolder.addFile(newFile);
};
问题是您正试图删除与 DriveApp
共享驱动器上的文件
如果您使用 Advanced Drive service 代替,您可以指定 "supportsAllDrives": true
因此,启用高级服务后:替换
var parents = newFile.getParents();
while (parents.hasNext()) {
var parent = parents.next();
parent.removeFile(newFile);
}
到
var id = copyFile.getId();
// or alternatively `var id = newFile.getId();` - because it is the same
Drive.Files.remove(id,{"supportsAllDrives": true})
至于getFolder.addFile(newFile);
删除文件后,您将无法再将其添加回来。另外,我不明白你这样做的动机 - copyFile.setName(newName);
足以重命名文件 - 你不需要删除旧名称的文件并插入新名称的文件。
更新
如果您的目标是将文件复制到团队云端硬盘文件夹,您可以使用云端硬盘 API:
轻松完成
function makeCopyFile(folderID, fileID, newName){
var resource = {
"parents": [
{
"id": folderID
}
],
"title": newName
}
Drive.Files.copy(resource, fileID, {"supportsAllDrives": true})
}
我有件事需要你的帮助。
我做了一个功能,其目标是复制模板文件并将其放入共享驱动器的文件夹中。问题是程序 returns :
"Exception: This operation cannot be performed on an item in a shared Drive"
但是,我拥有该共享驱动器的所有权限,所以我不明白。
我做了一些调整,发现 removeFile
和 addFile
是问题的一部分。如果我不 运行 它们,则会创建文件夹并制作副本。但我仍然需要移动文件。
我希望有人能帮助我。
PS : 你可以在下面找到我的代码。
function makeCopyFile(folderID, fileID, newName) {
var getFolder = DriveApp.getFolderById(folderID);
var file = DriveApp.getFileById(fileID);
var copyFile = file.makeCopy();
var newFile = copyFile.setName(newName);
// Remove the file from all parent folders
var parents = newFile.getParents();
while (parents.hasNext()) {
var parent = parents.next();
parent.removeFile(newFile);
}
getFolder.addFile(newFile);
};
问题是您正试图删除与 DriveApp
共享驱动器上的文件
如果您使用 Advanced Drive service 代替,您可以指定 "supportsAllDrives": true
因此,启用高级服务后:替换
var parents = newFile.getParents();
while (parents.hasNext()) {
var parent = parents.next();
parent.removeFile(newFile);
}
到
var id = copyFile.getId();
// or alternatively `var id = newFile.getId();` - because it is the same
Drive.Files.remove(id,{"supportsAllDrives": true})
至于getFolder.addFile(newFile);
删除文件后,您将无法再将其添加回来。另外,我不明白你这样做的动机 - copyFile.setName(newName);
足以重命名文件 - 你不需要删除旧名称的文件并插入新名称的文件。
更新
如果您的目标是将文件复制到团队云端硬盘文件夹,您可以使用云端硬盘 API:
轻松完成function makeCopyFile(folderID, fileID, newName){
var resource = {
"parents": [
{
"id": folderID
}
],
"title": newName
}
Drive.Files.copy(resource, fileID, {"supportsAllDrives": true})
}