【问题标题】:Bulk update links within the files on Google Drive?Google 云端硬盘文件中的批量更新链接?
【发布时间】:2017-05-18 12:54:38
【问题描述】:

我们使用 Google Drive (GAFE) 来准备和展示教学/培训材料。我们希望保留过去迭代的存档版本,然后为每个连续的培训课程制作一个新副本。

我已经成功地复制了我们的培训文件夹(使用 ericyd 的 gdrive-copy),我们很高兴地解决这个问题,但是......这些文件的交叉链接程度很高。例如,幻灯片将包含与该课程相关的文档讲义和 PDF 作业的链接。当我复制整个文件夹结构时,文件复制过来了,但链接仍然都链接到原始文件,而实际上我们想要的是让它们链接到各自的副本。

这是有道理的 - 显然,当您复制文件时,您通常不想同时更改其内容。但是,当您制作整个文件夹的存档时,理想情况下,您希望文件中的链接也能更新。

我可以为每对“原件和副本”编制一份包含文件 ID 的电子表格。有没有办法遍历文件夹中的所有 Google Docs/Sheets/Slides,并将电子表格文件中的原始 URL 替换为其各自的副本 URL?

在谈到 Google Apps 脚本时,我实际上是一个初学者,所以虽然我找到了 Get All Links in a Document 并且我猜它会成为答案的一部分,但我不知道该去哪里。

(顺便说一句,如果有不同的方式来解决这三个问题,自动修复幻灯片中的链接将是最有帮助的,因为这就是其中的大部分)

【问题讨论】:

    标签: url google-apps-script google-drive-api google-docs google-slides


    【解决方案1】:

    我知道这是一个相当古老的话题,但我最近遇到了需要解决的类似情况。在我的搜索中,这是我唯一能找到的关于由于重复而导致的交联的参考。不幸的是,我无法想出一个纯自动化的解决方案,但通过一些聪明才智,我能够减少更新超链接以引用重复文件而不是原始文件所需的步骤。

    首先,我借用了一些我在网上找到的脚本代码来生成 Google Drive 文件夹中的文件列表及其 URL。我将在下面发布代码。这会生成一个名为“URL LIST”的新 Google 表格(如果您愿意,您可以在脚本中更改名称),一旦生成,您需要在您的 Google Drive 的最近列表中找到并移动到包含复制的文件夹文件和表格。

    接下来,在我的文档超链接的 Google 表格中,我创建了一个额外的选项卡,也称为 URL LIST,并在 A1 中添加了一个 IMPORTRANGE() 来导入 URL LIST 内容。完成所有这些操作后,您只需在制作的每个副本中更新这个引用,从而大大减少您需要进行的更新次数,即 IMPORTRANGE() 指向特定的 URL,所以每个新生成的 URL LIST 都会有一个新的 URL,包含您的超链接和 IMPORTRANGE() 的复制文档需要指向该 URL。希望这是有道理的。

    接下来,您的超链接将需要一个类似于 =HYPERLINK(VLOOKUP(A1,'URL LIST'!$A$1:$B$10,2,FALSE) 的公式来获取导入的 URL。务必确保您表明查找范围未排序,或 FALSE,因为脚本吐出带有 URL 的文档列表的顺序可能会根据运行脚本时文件夹的排序方式而改变,并确保您不需要对列表进行排序。然后您可以将公式复制到需要超链接的每个单元格中。

    同样重要的是,您的 VLOOKUP() 搜索键与您的 URL LIST 中列出的完全一样。

    这种方法使我可以将更新超链接的步骤从 9 个步骤减少到每次复制时更新 IMPORTRANGE() 的 1 个步骤。

    我希望这对您或其他人有所帮助!

    将以下脚本复制并粘贴到您的脚本编辑器中:

    // replace your-folder below with the folder name for which you want a listing
    function listFolderContents() {
      var foldername = 'your-folder';
      var folderlisting = 'URL LIST ';
    
      var folders = DriveApp.getFoldersByName(foldername)
      var folder = folders.next();
      var contents = folder.getFiles();
    
      var ss = SpreadsheetApp.create(folderlisting);
      var sheet = ss.getActiveSheet();
      sheet.appendRow( ['name', 'link'] );
    
      var file;
      var name;
      var link;
      var row;
      while(contents.hasNext()) {
        file = contents.next();
        name = file.getName();
        link = file.getUrl();
        sheet.appendRow( [name, link] );     
      }  
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多