【问题标题】:Mass assigning hyperlinks to Google Sheets / Excel cells批量分配指向 Google 表格/Excel 单元格的超链接
【发布时间】:2020-09-19 18:31:37
【问题描述】:

我有一个 3 列的 Excel 文件(名称/时间/链接)。 名称为学院名称,时间为文件上传日期,链接为超链接“test.pdf”,例如。现在第 3 列包含 6000 个应该可以点击的文本单元格,例如,我会将所有文档上传到 AWS S3 或 Google Drive,然后将链接放入单元格中。单元格值和文件名相同。 (test.pdf 单元格 = test.pdf 可下载文件)。

我想知道的是如何在不手动将上传的文件链接复制/粘贴到单元格的情况下将所有这些链接分配给这些单元格?它有 6000 多条记录,这将花费大量时间。当然,文件是在 S3 还是 GD 上并不重要,我想我可以将它们上传到任何使这成为可能的服务。

TLDR 我想将我所有的 6000 个单元格超链接到人们可以下载的文档,但除了“手动执行”之外,我找不到任何自动化解决方案。

PS:文件夹结构是这样的

学院1个文件夹(10个pdf文档)

College 2文件夹(10个pdf文件)

...

College 600文件夹(10个pdf文档)

例如,如果学院名称是 Oxford,则该文件夹中的第一个文档将是 P1OU(牛津大学时期 1,一直到 10 个文档)

这是电子表格:

https://docs.google.com/spreadsheets/d/1kOWFQSMTYh0RJveDMqTXx_oeL_ueXkeKCBnHmTWk5ZA/edit?usp=sharing

【问题讨论】:

  • 我认为随机的网址,我知道谷歌驱动器随机分配链接。但是,我想如果有一些网站可以自动缩短 url 并以数字结尾,我可以将它一直拉到我的专栏末尾吗?
  • 最好如@Calculuswhiz 所说,如果您可以提供包含示例数据和预期输出的示例文档。只是为了避免误解。
  • 这是文档,第一列是名称,第二列是句号,第三列应该是可点击的链接docs.google.com/spreadsheets/d/…
  • 谢谢,您能否使用电子表格更新您的答案,并提供一些您想要生成的 LINK ADDRESS 示例?
  • @iansedano 嗯,我不确定我是否正确。当我将所有文件上传到 Google Drive 时,我已经有了链接。问题是将这些链接复制粘贴到每个单元格,这将花费大量时间。

标签: excel google-sheets automation hyperlink


【解决方案1】:

假设

下面的解决方案假设了一些事情:

  • 您已将文件上传到云端硬盘。
  • 电子表格中的文件名与云端硬盘中的文件名完全一致
  • 整个驱动器没有其他同名文件

使用 Apps 脚本的可能解决方案

  1. 打开您的电子表格。

  2. 导航到菜单“工具”>“脚本编辑器”。

  3. 在脚本编辑器窗口中将函数替换为:

    function getLinks() {
    
      var rangeNames = "C2:C10";
      var rangeLinks = "D2:D10";
    
      var fileNames = SpreadsheetApp.getActiveSheet().getRange(rangeNames).getValues();
    
      fileNames.forEach(function(row, i) {
        if (row[0] != "") {
          try {
            var fileFound = DriveApp.getFilesByName(row[0]).next();
            fileNames[i]=[fileFound.getDownloadUrl()];
          } catch(e){
            fileNames[i] = ["file not found"];
          };
        };
      });
    
      SpreadsheetApp.getActiveSheet().getRange(rangeLinks).setValues(fileNames);
    }
    
  4. 将变量 rangeNamesrangeLinks 替换为您希望为名称采用的范围以及您希望在其中查看超链接的范围。例如,根据您的电子表格:

    var rangeNames = "C2:C50";
    var rangeLinks = "D2:D50";
    

警告对于 6000 行,这可能需要 很长 时间并且可能会超时(最多 6 分钟)或者您可能会遇到配额问题(尽管我认为对于 6000 个请求,应该没问题)。您可能必须将其分成几批。查看更多关于here

  1. 运行脚本。

  2. 如果您希望它是具有不同名称且具有超链接的文件。拥有所有链接后,我建议您在工作表中使用 =HYPERLINK 函数。

说明

脚本首先获取文件名的范围并将它们放入一个数组中。然后它运行一个 for 循环,将在驱动器中搜索文件名,并返回其下载 URL。如果值为空,它将不搜索驱动器。如果找不到值,它只会在列中返回“找不到文件”。

参考文献

DriveApp.getFilesByName()

file-iterator - 从getFilesByName 返回的内容

getDownloadUrl()

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多