首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Google / Excel单元格大量分配超链接

向Google / Excel单元格大量分配超链接
EN

Stack Overflow用户
提问于 2020-09-19 18:31:37
回答 1查看 1.3K关注 0票数 2

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

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

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

PS:文件夹结构是这样的

学院1资料夹(10份pdf文件)

学院2资料夹(10份pdf文件)

..。

学院600文件夹(10份pdf文件)

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

这是电子表格:

UeXkeKCBnHmTWk5ZA/编辑?usp=共享

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 10:43:59

假设

下面的解决方案假设了以下几点:

  • 你的文件已经上传到驱动器了。
  • 电子表格中的文件名与驱动器中的文件名完全对应。
  • 在您的整个驱动器中,没有其他文件具有相同的名称

一种可能的应用程序脚本解决方案

  1. 打开电子表格。
  2. 导航到菜单"Tools“>”脚本编辑器“。
  3. 在“脚本编辑器”窗口中,将该函数替换为: 函数getLinks() { var rangeNames = "C2:C10";var rangeLinks = "D2:D10";var fileNames =getLinks fileNames.forEach(行,i) { if (行!= "") { try { var fileFound = DriveApp.getFilesByName (row ).next();};};});SpreadsheetApp.getActiveSheet().getRange(rangeLinks).setValues(fileNames);}
  4. 将变量rangeNamesrangeLinks替换为您希望使用的名称范围和要查看超链接的范围。例如,基于电子表格: rangeNames = "C2:C50";rangeLinks = "D2:D50";

警告为6000行,这可能需要很长时间,可能会超时(最多6分钟),或者您可能会遇到配额问题(虽然我认为对于6000条请求,它应该是好的)。你很可能要把它分成几批。请参阅更多关于这里的信息

  1. 运行脚本。
  2. 如果您希望它是一个具有超链接的不同名称的文件。一旦您有了所有的链接,我建议在工作表中使用=HYPERLINK函数。

解释

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

参考文献

DriveApp.getFilesByName()

文件迭代器 -从getFilesByName返回的内容

getDownloadUrl()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63972105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档