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

问题描述 投票:1回答:1

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

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

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

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

如果以后再更改原始文件夹Project1 ex的名称。到“新建建筑物”中,我需要在文件夹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);
}
google-apps-script google-drive-api shortcut
1个回答
2
投票

我相信您的目标如下。

  • 您想获得以下脚本作为快捷方式。

    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"
  });
});

参考:

© www.soinside.com 2019 - 2024. All rights reserved.