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

Google apps script 如何在Google Drive Apps脚本中创建快捷方式而不是创建多个父项,google-apps-script,google-drive-api,shortcut,Google Apps Script,Google Drive Api,Shortcut,我一直想在这里读到: 我理解快捷方式的基本原理,但我不知道如何在代码中使用它——语法 我需要将快捷方式放在与原始文件夹同名的文件夹中,而不是将文件夹放在多个文件夹中 我在草稿中放置了一个名为Project1的原始文件夹。此文件夹的快捷方式必须位于Folder2/Drafts、Folder3/Drafts和Folder4/Drafts中 如果我后来将原始文件夹Project1 ex.的名称更改为“New Building”,我需要在文件夹2、3和4中找到快捷方式(通过Id?-我可以将快捷方式的Id

我一直想在这里读到:

我理解快捷方式的基本原理,但我不知道如何在代码中使用它——语法

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

我在草稿中放置了一个名为Project1的原始文件夹。此文件夹的快捷方式必须位于Folder2/Drafts、Folder3/Drafts和Folder4/Drafts中

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

当我将项目1从草稿移到确认时。我需要将快捷方式从Folder2/草稿移动到Folder2/确认等

这主要是放置新文件夹的基本代码

        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
    被放在
    folder1DraftId
    folder2DraftId
    的文件夹中

对于这个问题,这个答案如何

修改点:
  • 在这种情况下,将使用驱动器API中的files.create方法。但在现阶段,文件的方法:在驱动器中插入API v2也可以创建快捷方式。因此,在这个答案中,使用了AdvancedGoogleServices的驱动API v2
修改脚本: 当您的脚本被修改时,它将变成如下所示。在运行脚本之前

发件人: 致: 参考资料:
    • 官方文件如下

      • 注意:使用
        文件创建快捷方式的应用程序。insert
        必须指定MIME类型
        应用程序/vnd.google Apps.drive sdk

      • 但是,当使用
        application/vnd.google apps.drive sdk
        时,无法创建快捷方式。我不确定这是错误还是当前的规范。所以我使用
        application/vnd.google apps.shortcut
        作为mimeType


回答你的问题了吗?@Cooper谢谢你的回答。也许它确实回答了我的问题。但我就是无法理解;-)我更新了上面的帖子,提出了一个简单明了的问题(我希望)将其分解到最低限度。从那以后,我想我将能够做剩下的事情。这正是我需要继续做的。谢谢大家!@Kasper Egelund感谢您的回复和测试。我很高兴你的问题解决了。也谢谢你。
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"
  });
});