Google Sheets:通过 Apps 脚本批量 getRangeByName

2024-02-05

是否可以获得多个按名称范围一通电话?我有一个复杂的函数,需要按名称获取多个范围,而 Spreadsheet.getRangeByName(name) 会显着减慢我的脚本速度。有时这些调用大约需要 2 秒,有时单个调用可能需要大约 45 秒。

限制:

  • 我需要获取范围(不仅仅是值),因为脚本格式、获取 A1Notation 供以后使用、偏移量等。
  • 这些命名范围的地址会因其他函数而发生变化

我尝试过的:

  • 将 Range 对象存储在文档属性中。这似乎不起作用,因为范围只有函数。 JSON.stringify(Range) 什么也不返回。
  • 使用Google Sheets API v4的batchGet函数,但它似乎只获取值

对于命名范围,特定获取的唯一方法是通过工作簿的getRangeByName https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getRangeByName(String)方法。还有工作簿级别 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getNamedRanges() and 工作表级 https://developers.google.com/apps-script/reference/spreadsheet/sheet#getNamedRanges()可用集合:

var namedRangeArray = SpreadsheetApp.getActive().getNamedRanges();
var a1array = [];
namedRangeArray.forEach(function (namedRange) {
  var range = namedRange.getRange();
  a1array.push(range.getA1Notation()); // Doesn't include a sheet reference...
  ...
});

我最初误读你的问题是指通过 A1 表示法获取多个范围。为此,RangeList https://developers.google.com/apps-script/reference/spreadsheet/range-listclass 提供了非常小的速度改进,但它目前仅接受 A1/R1C1 样式的输入数组,例如[ "A1", "B2", "C3" ],并要求范围位于同一张纸上。

function compare_GetRange_And_GetRangeList() {
  var rangeStrings = [
    "A1:A100", "B2:B101", "C3:C102"
  ];
  var sheet = SpreadsheetApp.getActive().getActiveSheet()

  // Acquire multiple.
  console.time("Get rangelist");
  var ranges = sheet.getRangeList(rangeStrings);
  console.timeEnd("Get rangelist");

  // Acquire single.
  var separate = [];
  console.time("Get individual");
  ["D4:D103", "E5:E104", "F6:F105"].forEach(function (a1) {
    separate.push(sheet.getRange(a1));
  });
  console.timeEnd("Get individual");

  // Do something with the acquired ranges.
  [].concat(ranges.getRanges(), separate).forEach(function (rl) {
    console.log(rl.getA1Notation());
  });
}

If you run this and then check Stackdriver, you can see the execution times, e.g.: enter image description here

我为每次调用使用不同的范围,以避免 Apps 脚本服务器缓存方法比较之间的引用。

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

Google Sheets:通过 Apps 脚本批量 getRangeByName 的相关文章

  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • .setFormula() 并收到错误缺少 ) 参数列表

    I have setFormula 并坚持这一点 我认为问题在于逗号 在发布这个问题之前 我研究了几个在线论坛 但没有运气 也许这里有人可以帮助我 我确实知道使用的规则 and 这就是为什么我尝试了几个公式 但仍然收到错误消息 参数列表后缺
  • 将 Google Drive 目录中的所有文件恢复为旧版本

    最近 病毒加密了我的所有文件 不幸的是 谷歌备份和同步立即将文件的新版本 加密 上传到我的驱动器 我知道我可以将单个文件恢复到以前的版本 但我的驱动器上大约有 30 000 个文件 这意味着我无法手动恢复所有这些文件 我尝试使用 Apps
  • 更新行时获取电子邮件用户值

    我和我的团队有电子表格 当他们更新行 基于他们使用的帐户 时 如何 自动 获取电子邮件用户值 因此 每次他们更新 任务 列时 电子邮件 列都会自动更新 就像下表一样电子表格 https i stack imgur com lgDhF png
  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 如何使用谷歌应用程序脚本开发渐进式网络应用程序

    我使用 google app 脚本开发了一些应用程序 并将它们部署为 Web 应用程序 它们都工作正常 然后我决定将它们转换为 PWA 原因是让它们可以安装在智能手机用户的主屏幕上 能够使用推送通知 缓存等 简而言之 PWA 提供的所有优势
  • 如何在 Google 电子表格中使用 Google 脚本从相邻单元格获取值?

    如果之前有人问过这个问题 我深表歉意 但我已经寻找了一个例子 不幸的是我无法找到答案 因此我为什么在这里问 如果我在 Google 电子表格中有一个自定义函数 如果内容是动态生成的 我如何获取单元格的值 当它是固定值时我可以获取该值 但当它
  • 如何使用 Google Apps 脚本编辑现有的 Google 表单项(问题)

    我有一个谷歌脚本来构建谷歌表单 该脚本使用包含问题和相应选项的电子表格填写表单 表格中显示的问题需要定期更新 我希望通过更改电子表格中的问题来更新表单中的问题 如下所示 I use onOpen 对于脚本 以便每次访问表单时 脚本都会重建最
  • 如何检查 Gmail 标签是否有嵌套子标签?

    使用Google Apps脚本 是否有一个功能可以检查Gmail标签是否有嵌套子标签 如果标签有一个或多个子标签 我想将它们从代码序列中排除 没有直接的方法可以从 父 标签获取标签 但是使用简单的方法来获取标签非常简单getUserLabe
  • 从 Gmail 获取 pdf 附件作为文本

    我在网络和 Stack Overflow 上搜索但没有找到解决方案 我尝试做的事情如下 我通过邮件收到某些附件 我希望将其作为 纯 文本进行进一步处理 我的脚本如下所示 function MyFunction var threads Gma
  • 如何使用应用程序脚本在 Google 电子表格中移动工作表 [重复]

    这个问题在这里已经有答案了 我想使用应用程序脚本在电子表格中移动工作表 怎么做 最好的直播 你看过吗文档 https developers google com apps script reference spreadsheet sprea
  • 无法实施第三方 Google 日历会议插件

    我正在研究 Google 日历会议插件的实施并发现了一些问题 我按照文档执行示例代码 但它没有按预期工作 从我的角度来看 我的清单文件是完整的 但是当我尝试从 从清单部署 链接发布日历会议插件时 它会打开我的谷歌日历 但它不会显示我的会议
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 复制电子表格也会复制所有链接的文件

    当我使用库方法时 我希望能够仅复制电子表格及其所有工作表以及所有定义的工作表名称 spreadSheet copy newSSName Or myFile makeCopy newNameOfFile 目前 这些方法复制所有链接的表单和表单
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • HTML 表单未运行 (withSuccessHandler) 函数

    我在 Google App Script Sheets 中有一个 HTML 表单 它要求用户提供日期值 然后提交该值 HTML 表单运行 唯一的问题是 obj 不记录 我不明白这是为什么 HTML
  • 根据单元格值隐藏列

    在我的谷歌电子表格 A 中 我使用 TRANSPOSE 和 IMPORTRANGE 公式的组合从日历电子表格 B 导入数据 以便填写事件的工作时间表 因为每个日期都有 3 个事件空位 但这些空位并不总是被填满 所以我收到了很多过时的列 表格
  • BigQuery REGEXP_MATCH 和重音:边界通配符失败?

    在 GAS 中 我可以正确地将重音符号与具有边界字符的正则表达式相匹配 例如 b b 仅当字符 是单独的单词时才匹配 这在 GAS 中有效 function test regExp var str la s ance est Paris v
  • Google Sheets API v4 和 valueInputOption

    我的电子表格中有三列 第一个是日期 第二个和第三个是简单字符串 当我批量上传数据时valueInputOption RAW 我的日期列得到错误的结果 所有日期前面都有一个看不见的撇号 字符串列没问题 当我使用valueInputOption
  • 如何求Google电子表格中每列的最大值之和?

    我有一个谷歌数字电子表格 如何从每列中获取最大值 并仅使用one公式 没有临时单元 没有脚本 1 2 1 0 1 3 0 2 0 对于上表 结果应为 6 1 2 3 每列的最大值 但我想要一个也适用于更大的表的解决方案 作为一个更普遍的问题

随机推荐