如何在 Google Drive Apps 脚本中创建快捷方式而不是多个父项
How to create a shortcut in Google Drive Apps Script instead of multiple parents
我一直试图在这里阅读它:https://developers.google.com/drive/api/v3/shortcuts
我了解快捷方式的基础知识,但我不知道如何在代码中使用它 - 语法。
我需要的不是将一个文件夹放在多个文件夹中,而是将快捷方式放在那些与原始文件夹同名的文件夹中。
我在草稿中有一个名为 Project1 的原始文件夹。此文件夹的快捷方式需要放在 Folder2/Drafts、Folder3/Drafts 和 Folder4/Drafts.
中
如果我之后更改原始文件夹 Project1 ex 的名称。 "New Building" 我需要在文件夹 2,3 和 4 中找到快捷方式(通过 Id? - 我可以将快捷方式的 ID 放在数据 sheet 中,从那里我可以遍历它们) - 和然后将它们重命名为原始文件夹的新名称。
当我将 Project1 从 Drafts 移动到 Confirmed 时。我需要将快捷方式从 Folder2/Drafts 移动到 Folder2/Confirmed 等
这主要是放置新文件夹的基本代码的样子
var folder1 = draft.createFolder("DRAFT - "+"Project1");
var folder1Url = folder1.getUrl();
var folder1Id = folder1.getId();
folder2Draft.addFolder(folder1);
当更改文件夹的名称时,其他地方的名称(当然)也会更改。但据我了解,快捷方式并非如此。我用手动创建的快捷方式对其进行了测试 确认了这一点。
重命名部分我在确认项目时是这样的:
var folder1 = DriveApp.getFolderById(folder1Id);
var folder1NameOld = folder1.getName();
var folder1NameNew = folder1NameOld.replace("DRAFT - ","");
folder1.setName(folder1NameNew);
我在确认项目时移动了文件,简单的是:
confirmed.addFolder(folder1);
draftsFolder.removeFolder(folder1);
该脚本是在一个 spreadsheet 中制作的,我已经将所有文件夹 ID 放入文件的数据 sheet 中,这样我就可以很容易地引用不同的文件夹,如果需要的话也可以收集快捷方式的 ID 以便能够重命名它们。
更新:
提出一个更明确的问题:
如何使用快捷方式而不是多亲子关系来做到这一点?
function shortcut() {
var s = SpreadsheetApp.getActive();
var sheet = s.getActiveSheet();
var projectFolderId = sheet.getRange('B1').getValue();
var folder1DraftId = sheet.getRange('B2').getValue();
var folder2DraftId = sheet.getRange('B3').getValue();
var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
}
我相信你的目标如下。
您要实现以下脚本作为快捷方式
function shortcut() {
var s = SpreadsheetApp.getActive();
var sheet = s.getActiveSheet();
var projectFolderId = sheet.getRange('B1').getValue();
var folder1DraftId = sheet.getRange('B2').getValue();
var folder2DraftId = sheet.getRange('B3').getValue();
var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
}
在上面的脚本中,folder1
被放在folder1DraftId
和folder2DraftId
的文件夹中。
为此,这个答案怎么样?
修改点:
- 本例中使用DriveAPI中files.create的方法。但现阶段,Files: insert in Drive API v2 的方法也可以创建快捷方式。所以在这个答案中,使用了 Drive API v2 of Advanced Google services.
修改后的脚本:
当你的脚本修改后,变成如下。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:
var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
到:
const folderIDs = [folder1DraftId, folder2DraftId];
folderIDs.forEach(f => {
Drive.Files.insert({
shortcutDetails: {targetId: projectFolderId},
parents: [{id: f}],
title: DriveApp.getFolderById(projectFolderId).getName(),
mimeType: "application/vnd.google-apps.shortcut"
});
});
参考文献:
- Advanced Google services
- Create a shortcut to a Drive file
-
官方文档是这样说的
Note: Apps creating shortcuts with files.insert
must specify the MIME type application/vnd.google-apps.drive-sdk
.
但是,当使用application/vnd.google-apps.drive-sdk
时,无法创建快捷方式。我不确定这是错误还是当前规范。所以我使用 application/vnd.google-apps.shortcut
作为 mimeType。
我一直试图在这里阅读它:https://developers.google.com/drive/api/v3/shortcuts
我了解快捷方式的基础知识,但我不知道如何在代码中使用它 - 语法。
我需要的不是将一个文件夹放在多个文件夹中,而是将快捷方式放在那些与原始文件夹同名的文件夹中。
我在草稿中有一个名为 Project1 的原始文件夹。此文件夹的快捷方式需要放在 Folder2/Drafts、Folder3/Drafts 和 Folder4/Drafts.
中如果我之后更改原始文件夹 Project1 ex 的名称。 "New Building" 我需要在文件夹 2,3 和 4 中找到快捷方式(通过 Id? - 我可以将快捷方式的 ID 放在数据 sheet 中,从那里我可以遍历它们) - 和然后将它们重命名为原始文件夹的新名称。
当我将 Project1 从 Drafts 移动到 Confirmed 时。我需要将快捷方式从 Folder2/Drafts 移动到 Folder2/Confirmed 等
这主要是放置新文件夹的基本代码的样子
var folder1 = draft.createFolder("DRAFT - "+"Project1");
var folder1Url = folder1.getUrl();
var folder1Id = folder1.getId();
folder2Draft.addFolder(folder1);
当更改文件夹的名称时,其他地方的名称(当然)也会更改。但据我了解,快捷方式并非如此。我用手动创建的快捷方式对其进行了测试 确认了这一点。
重命名部分我在确认项目时是这样的:
var folder1 = DriveApp.getFolderById(folder1Id);
var folder1NameOld = folder1.getName();
var folder1NameNew = folder1NameOld.replace("DRAFT - ","");
folder1.setName(folder1NameNew);
我在确认项目时移动了文件,简单的是:
confirmed.addFolder(folder1);
draftsFolder.removeFolder(folder1);
该脚本是在一个 spreadsheet 中制作的,我已经将所有文件夹 ID 放入文件的数据 sheet 中,这样我就可以很容易地引用不同的文件夹,如果需要的话也可以收集快捷方式的 ID 以便能够重命名它们。
更新: 提出一个更明确的问题: 如何使用快捷方式而不是多亲子关系来做到这一点?
function shortcut() {
var s = SpreadsheetApp.getActive();
var sheet = s.getActiveSheet();
var projectFolderId = sheet.getRange('B1').getValue();
var folder1DraftId = sheet.getRange('B2').getValue();
var folder2DraftId = sheet.getRange('B3').getValue();
var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
}
我相信你的目标如下。
您要实现以下脚本作为快捷方式
function shortcut() { var s = SpreadsheetApp.getActive(); var sheet = s.getActiveSheet(); var projectFolderId = sheet.getRange('B1').getValue(); var folder1DraftId = sheet.getRange('B2').getValue(); var folder2DraftId = sheet.getRange('B3').getValue(); var folder1 = DriveApp.getFolderById(projectFolderId); DriveApp.getFolderById(folder1DraftId).addFolder(folder1); DriveApp.getFolderById(folder2DraftId).addFolder(folder1); }
在上面的脚本中,
folder1
被放在folder1DraftId
和folder2DraftId
的文件夹中。
为此,这个答案怎么样?
修改点:
- 本例中使用DriveAPI中files.create的方法。但现阶段,Files: insert in Drive API v2 的方法也可以创建快捷方式。所以在这个答案中,使用了 Drive API v2 of Advanced Google services.
修改后的脚本:
当你的脚本修改后,变成如下。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
到:
const folderIDs = [folder1DraftId, folder2DraftId];
folderIDs.forEach(f => {
Drive.Files.insert({
shortcutDetails: {targetId: projectFolderId},
parents: [{id: f}],
title: DriveApp.getFolderById(projectFolderId).getName(),
mimeType: "application/vnd.google-apps.shortcut"
});
});
参考文献:
- Advanced Google services
- Create a shortcut to a Drive file
-
官方文档是这样说的
Note: Apps creating shortcuts with
files.insert
must specify the MIME typeapplication/vnd.google-apps.drive-sdk
.但是,当使用
application/vnd.google-apps.drive-sdk
时,无法创建快捷方式。我不确定这是错误还是当前规范。所以我使用application/vnd.google-apps.shortcut
作为 mimeType。