使用 Google 应用程序脚本在 G 套件共享驱动器中创建 Google 文档快捷方式
Creating a Google Document shortcut in a G suite shared drive using Google App Script
我能够轻松地创建 Google 文档文件的快捷方式,使用我的云端硬盘中的快捷方式,或我的云端硬盘中的文件夹。这个问题和回应
对这有很大帮助
但是,当我尝试对 G Suite 共享云端硬盘文件夹执行相同操作时,出现以下错误:
GoogleJsonResponseException: API call to drive.files.insert failed
with error: File not found: #FILE NUM
用于“我的云端硬盘”但不适用于共享云端硬盘的代码是:
function createShortcut() {
const targetId = "TARGET DOCUMENT ID";
const shortcutName = "Test";
const folderId = "TARGET FOLDER ID";
const resource = {
shortcutDetails: { targetId: targetId },
title: shortcutName,
mimeType:"application/vnd.google-apps.shortcut",
supportsTeamDrives:true,
parents: [{id: folderId}]
};
const shortcut = Drive.Files.insert(resource);
}
我查阅了文档:https://developers.google.com/drive/api/v3/shortcuts 没有运气。
问题
您在文件资源中包含 supportsTeamDrives
参数。首先,如文档中所示,此参数已弃用:您现在应使用 supportsAllDrives
。其次,请求体(你叫的那个resource
)和请求参数是有区别的
解决方案
如果您查看 Drive.Files.insert()
函数签名,您会看到有 3 个选项:
.insert(File resource)
;
.insert(File resource, Blob mediaData)
;
.insert(File resource, Blob mediaData, Object optionalArgs)
;
您使用的是第一个,这不允许指定任何请求参数。因此,您应该使用第三个。
以下是如何在您的案例中使用它:
// Since you are not creating nor uploading any file you shall leave the Blob mediatada parameter as null
const resource = {
shortcutDetails: { targetId: targetId },
title: shortcutName,
mimeType:"application/vnd.google-apps.shortcut",
parents: [{id: folderId}]
};
const options = { supportsAllDrives: true };
const shortcut = Drive.Files.insert(resource, null, options);
参考
在此处查找https://groups.google.com/g/google-apps-script-community/c/bH-kn9UW_cg
添加参数 supportsAllDrives 设置为 true。并确保您有权将文件添加到驱动器。
高级驱动服务使用 v2 API。您可以查看参考以获取更多详细信息。
let sheetFile = Drive.Files.insert( newFile, blob, { convert: true, supportsAllDrives: true } );
我能够轻松地创建 Google 文档文件的快捷方式,使用我的云端硬盘中的快捷方式,或我的云端硬盘中的文件夹。这个问题和回应
但是,当我尝试对 G Suite 共享云端硬盘文件夹执行相同操作时,出现以下错误:
GoogleJsonResponseException: API call to drive.files.insert failed with error: File not found: #FILE NUM
用于“我的云端硬盘”但不适用于共享云端硬盘的代码是:
function createShortcut() {
const targetId = "TARGET DOCUMENT ID";
const shortcutName = "Test";
const folderId = "TARGET FOLDER ID";
const resource = {
shortcutDetails: { targetId: targetId },
title: shortcutName,
mimeType:"application/vnd.google-apps.shortcut",
supportsTeamDrives:true,
parents: [{id: folderId}]
};
const shortcut = Drive.Files.insert(resource);
}
我查阅了文档:https://developers.google.com/drive/api/v3/shortcuts 没有运气。
问题
您在文件资源中包含 supportsTeamDrives
参数。首先,如文档中所示,此参数已弃用:您现在应使用 supportsAllDrives
。其次,请求体(你叫的那个resource
)和请求参数是有区别的
解决方案
如果您查看 Drive.Files.insert()
函数签名,您会看到有 3 个选项:
.insert(File resource)
;.insert(File resource, Blob mediaData)
;.insert(File resource, Blob mediaData, Object optionalArgs)
;
您使用的是第一个,这不允许指定任何请求参数。因此,您应该使用第三个。
以下是如何在您的案例中使用它:
// Since you are not creating nor uploading any file you shall leave the Blob mediatada parameter as null
const resource = {
shortcutDetails: { targetId: targetId },
title: shortcutName,
mimeType:"application/vnd.google-apps.shortcut",
parents: [{id: folderId}]
};
const options = { supportsAllDrives: true };
const shortcut = Drive.Files.insert(resource, null, options);
参考
在此处查找https://groups.google.com/g/google-apps-script-community/c/bH-kn9UW_cg
添加参数 supportsAllDrives 设置为 true。并确保您有权将文件添加到驱动器。 高级驱动服务使用 v2 API。您可以查看参考以获取更多详细信息。
let sheetFile = Drive.Files.insert( newFile, blob, { convert: true, supportsAllDrives: true } );