使用谷歌应用程序脚本将谷歌表格中的单元格的超链接分配给谷歌驱动器文件

2023-12-10

下面是一个 GAS,它从文件夹中提取文件名和 google 驱动器超链接并将它们粘贴到 google 表格中。

现在我想根据文件名(使用不同的气体准确提取文件名)创建指向谷歌表格中选定范围的谷歌驱动器超链接,并保持其单元格位置。有人可以在这里补充一下或者指导我参考吗?

要求:

  • 选择一系列单元格并在文件夹中递归搜索“匹配”文件名
  • 我有文件夹和子文件夹,因此脚本必须导航/搜索多层文件夹。
  • 文件夹的深度约为3-4层

以下是当前工作的GAS

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getActiveSheet();
  var c=s.getActiveCell();
  var fldr=DriveApp.getFolderById("<id>");
  var files=fldr.getFiles();
  var names=[],f,str;
  while (files.hasNext()) {
    f=files.next();
    str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    names.push([str]);
  }
  s.getRange(c.getRow(),c.getColumn(),names.length).setFormulas(names);
}

电子表格样本:

enter image description here


  1. There are the folder names and filenames on a sheet in the Spreadsheet.
    • 这些文件夹和文件位于特定文件夹中。
    • 每个名称在所有值中都是唯一的名称。
  2. 您选择范围。例如,图像电子表格中的“A1:D12”。
  3. 您想要检索所有文件名并使用文件名搜索文件。
  4. 您想要将检索到的值替换为文件超链接的公式。

从您的回复和补充信息中,我可以像上面那样理解。如果我的理解是正确的,那么这个示例脚本怎么样?请将此视为几个可能答案之一。

修改后的脚本:

设置文件夹ID后,请选择范围(例如“A1:D12”)并运行以下功能myFunction()。这样,文件名就被替换为超链接的公式。

function myFunction() {
  var folderId = "###"; // Please set the folder ID.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var c = s.getActiveRange()
  var fldr = DriveApp.getFolderById(folderId);
  var values = c.getValues();
  var getFiles = function getFiles(folder) {
    var folders = folder.getFolders();
    while(folders.hasNext()) {
      var fol = folders.next();
//      for (var i = 0; i < values.length; i++) {
//        for (var j = 0; j < values[i].length; j++) {
//          values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
//        }
//      }
      getFiles(fol);
    }
    var files = folder.getFiles();
    while (files.hasNext()) {
      var f = files.next();
      for (var i = 0; i < values.length; i++) {
        for (var j = 0; j < values[i].length; j++) {
          values[i][j] = values[i][j] == f.getName() ? ('=hyperlink("' + f.getUrl() + '","' + f.getName() + '")') : values[i][j];
        }
      }
    }
  }(fldr);
  if (values.length > 0) {
    s.getRange(c.getRow(), c.getColumn(), values.length, values[0].length).setValues(values);
  }
}

Note:

  • 当使用上面注释的以下行时,也会放置文件夹的超链接。

    for (var i = 0; i < values.length; i++) {
      for (var j = 0; j < values[i].length; j++) {
        values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
      }
    }
    
  • 如果单元格值和子文件夹中存在相同的文件名和文件夹名称,则需要从单元格值解析文件夹和文件的逻辑。在你的附加图像中,我无法理解其中的逻辑。这是我技术不好造成的。我对此表示歉意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用谷歌应用程序脚本将谷歌表格中的单元格的超链接分配给谷歌驱动器文件 的相关文章

  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • 当 Google 任务标记为“已完成”时如何触发 Google 脚本

    Google Apps 脚本允许由各种事件触发脚本 看here https developers google com apps script guides triggers 当用户将任务标记为已完成 在 Google 任务中 时 我想更新
  • 将身份验证从一个 Google Apps 脚本网络应用程序传递到另一 Google Apps 脚本网络应用程序

    我的 Google Apps 帐户中有两个 Google Apps 脚本 两者均已发布为具有以下设置的网络应用程序 脚本A 像我一样执行谁有权访问网络应用程序 XXXXXXX com 内的任何人 脚本B 以访问应用程序的用户身份执行谁有权访
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • 从 Google Apps 脚本运行保存的 bigquery 查询?

    我们经常使用 Google Apps 脚本来运行 BigQuery 查询并将其放入 Google Sheet 中 然而 工作流程很烦人 在 BigQuery 中运行查询 直到正确为止 复制 粘贴到文本编辑器以放入换行斜杠 在应用程序脚本中运
  • Google Apps 脚本 - 是否可以仅通过 Google Apps 脚本更改表格中的某些单元格?

    我在 Google SpreadSheet 中制作了一个目录 我的电子表格有一个表格 用户可以在其中添加信息 该表是通过从数据库表获取数据的脚本动态创建的 用户可以编辑表中的某些单元格 然后单击按钮将更改保存回数据库表中 我想限制他可以手动
  • 我们可以使用 Google Spreadsheet 作为后端数据库吗

    我正在尝试开发一个应用程序 在其中从与某些事务相关的多个客户端获取数据 现在我想使用 Google Spreadsheet 进行一些分析 有什么方法可以使用 ASP Net MVC 使用 C 实现此目的 Google 提供 OAuth 当我
  • 阅读 Google 文档电子表格

    是否可以使用 PHP 从 Google Docs 电子表格中提取行 在 SQL 中我会使用类似的东西 SELECT FROM table WHERE field value LIMIT 1 有没有办法做到这一点 我听说你应该使用 Zend
  • Google 表格 - ARRAYFORMULA 中的 VLOOKUP

    我正在尝试在 Google 表格中的数组公式内进行 Vlookup 我有两张纸 S1 和 S2 每个列都有 3 个相同的列 A 列 日期 B 列 名称 和 C 列 付款类型 我想根据日期和姓名组合匹配将付款类型从表 2 读取到表 1 这意味
  • 使用 Google Advanced Drive 服务通过 Apps 脚本在文件夹中创建新文件

    创建新文件有四种方法 DocsList 显示为DocsList在主列表中 内置于 Apps 脚本中 DriveApp 显示为Drive在主列表中 内置于 Apps 脚本中 驱动器 API 也显示为Drive在主列表中 必须添加到 Apps
  • 使用 google apps 脚本添加大量响应

    我想制作一个脚本 添加大量 大约 1500 简历和候选人信息作为对表单的回复 我有谷歌电子表格的信息 我将其链接到表单 但我只能管理回复 即使我更改电子表格 或添加 表单中也不会发生更新 我正在添加行 但没有添加响应 那可能吗 我看到了 2
  • 嵌入来自谷歌驱动器的图像,没有灰色边框和缩放工具?

    I have a webpage that has an image that is stored in google drive and using the google drive embed code results in this
  • Google Sheets - 如何从 iOS 应用程序运行脚本?

    我在电子表格中使用脚本在活动行下方添加行并从活动行复制内容 在 PC 上 我可以通过图像 绘图触发脚本 效果很好 但我不知道如何让它在 iOS 应用程序中工作 其中图像触发不起作用 并且将内容从一个应用程序复制到另一个应用程序是一场噩梦 我
  • 将数据从一张纸复制到另一张纸的APP脚本

    我尝试使用此脚本将数据从一张工作表复制到另一张工作表 但是当我更新源工作表中的数据并运行脚本时 整个数据都会被复制 我只想将更新的数据复制到目标工作表而不重叠 谁能建议该怎么做 function copyPaste var ss Sprea
  • 从 Google 电子表格中的列填充 HTML 下拉菜单

    我是 gs 的新手 所以这应该不难 我有一个 Google 电子表格 其中一列中有值 假设 A 列 我使用 gs 创建了一个自定义菜单 用户将在其中选择一个选项 单击其中一个选项 新组件 将出现一个弹出窗口 其中包含一个下拉菜单 用户应从其
  • 向文档添加动态页眉/页脚

    我想知道是否有一种方法可以向文档添加动态页眉或页脚 即在页脚中添加每个页面都不同的 页面标题 据我所知 编辑内置页眉或页脚将反映在每个页面上 我想知道是否有人想到了一种解决方法 通过访问页面上的第一行 最后一行并在那里插入文本来 强制 它
  • Google 脚本:如何编写从驱动器中的 txt 自动导入电子表格的脚本?

    我以前从未使用过 Javascript 而且多年来我一直在尝试这样做 但没有成功 而且我找不到任何以前的人尝试过 我想直接从驱动器中的 txt 文档复制文本数据 可以手动完成此操作 但我希望每天自动完成 文本文件 Boxes Made 3
  • 如何将值传递到 HTML 模板侧边栏?

    我的任务是更换一些现有的 Access 数据库 我想知道你们是否可以帮助我 目前 我有一个谷歌表格 https docs google com spreadsheets d 1JS5Iwx60Zk7VL8lYz6Yj7ew4eYPhl2Nk
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL

随机推荐