google-apps-script - 如何在 Google Drive Apps 脚本中创建快捷方式而不是多个父级

标签 google-apps-script google-drive-api shortcut

我一直在尝试在这里阅读:https://developers.google.com/drive/api/v3/shortcuts

我了解快捷方式的基础知识,但我不知道如何在代码中使用它 - 语法。

我需要将快捷方式放置在与原始文件夹同名的文件夹中,而不是将一个文件夹放置在多个文件夹中。

我在草稿中放置了一个名为 Project1 的原始文件夹。该文件夹的快捷方式需要放置在Folder2/Drafts、Folder3/Drafts 和Folder4/Drafts 中。

如果我后来更改了原始文件夹 Project1 ex 的名称。到“New Building”,我需要在文件夹 2,3 和 4 中找到快捷方式(通过 Id? - 我可以将快捷方式的 ID 放入数据表中,从中可以迭代它们) - 然后将它们重命名为原始文件文件夹的新名称。

当我将 Project1 从草稿移动到已确认时。我需要将快捷方式从“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);

该脚本是在电子表格中制​​作的,我已经将所有文件夹ID放入文件的数据表中,这样我就可以很容易地引用不同的文件夹,如果需要,还可以收集快捷方式的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 被放入 folder1DraftIdfolder2DraftId 文件夹中。

对于这个,这个答案怎么样?

修改点:

  • 本例使用Drive API中的files.create方法。但现阶段,Drive API v2 中的 Files: insert 方法也可以创建快捷方式。因此,在本答案中,使用了高级 Google 服务的 Drive API v2。

修改后的脚本:

当你的脚本被修改后,它会变成如下。在运行脚本之前,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
  • Files: insert of Drive API v2

    • 官方文档是这样说的。

      • 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。

关于google-apps-script - 如何在 Google Drive Apps 脚本中创建快捷方式而不是多个父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047554/

相关文章:

javascript - 如何使用正则表达式从字符串地址获取特定文本?

google-apps-script - 用于从 Google 文档中删除多余空格的 Google Apps 脚本

node.js - 使用 API key 访问 Google Drive 文件

linux - 是否有适用于 Linux 的 Google 云端硬盘客户端应用程序?

bash - 启动 Python .py 脚本的别名

c# - C# 控制台类的键盘快捷方式

google-apps-script - 更新/替换 Google 文档上的内嵌图片

javascript - 如何在 Google Apps 脚本 Google 文档扩展中包含大型外部样式表和脚本

android - 如何使用 android auto backup 以编程方式恢复和备份

git - 在新的 Vim 窗口中写入 Git 提交消息,然后在 Vim 中提交所有内容