1

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

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

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

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

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

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

4

1 回答 1

0

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

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

接下来,在我的文档超链接的 Google 表格中,我创建了一个额外的选项卡,也称为 URL LIST,并在 A1 中添加了一个 IMPORTRANGE() 来导入 URL LIST 内容。完成所有这些后,您只需在制作的每个副本中更新这个引用,从而大大减少您需要进行的更新次数,即 IMPORTRANGE() 指向特定的 URL,所以每个新生成的 URL LIST 都会有一个包含超链接和 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] );     
  }  
};
于 2018-12-29T20:23:58.013 回答