Google表格:通过Apps脚本批量获取getRangeByName

纳尔逊

一次调用能否通过名称获得多个范围我有一个复杂的函数,需要按名称捕获许多范围,而Spreadsheet.getRangeByName(name)大大降低了我的脚本速度。有时,这些通话大约需要2秒钟,有时单个通话可能需要45秒钟。

限制条件:

  • 我需要获取范围(不仅是值),因为脚本会格式化,获取A1Notation供以后使用,标记等。
  • 这些命名范围的地址因其他功能而改变

我试过的

  • 将范围对象存储在文档属性中。这似乎不起作用,因为范围仅具有功能。JSON.stringify(Range)不返回任何内容。
  • 使用Google Sheets API v4的batchGet函数,但它似乎仅在获取值
来吧

对于命名范围,唯一的特定获取方法是通过工作簿的getRangeByName方法。还提供工作簿级别工作表级别的集合:

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该类在速度上做了很小的改进,但目前仅接受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());
  });
}

如果运行此命令,然后检查Stackdriver,则可以看到执行时间,例如: 在此处输入图片说明

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

批量更新一组Google表格的Apps脚本

Google表格通过Apps脚本插入散点图和趋势线

如何通过Apps脚本在Google表格中“清除格式”

Google表格+ Apps脚本:通过ID循环移动文件

Google Apps 脚本 - 使用此脚本/公式获取 Google 表格中某些选定表格的价值

通过Google Apps脚本中的https调用获取状态文本

Google Apps脚本:Google表格分组

创建副本后通过 Google Apps 脚本打开 Google 电子表格

通过Google Apps脚本发布Google电子表格

通过Google Apps脚本#2发布Google电子表格

如何通过Google Apps脚本在Google表格中标识onChange事件源/作者

Google Apps脚本-从自定义菜单项获取Google表格中的权限错误

如何获取列范围内的特定数据列?Google Apps 脚本 - Google 表格

使用base64编码的数据通过Apps脚本将图像插入Google表格

Google Apps脚本通过电子表格发送电子邮件

Google表格+ Apps脚本:更快然后循环

从Apps脚本显示消息Google表格

通过ID获取Google表格?

如何在Google Apps脚本中获取发布到网络电子表格的ID

用于电子表格的 Google Apps 脚本 - 不断获取函数 () { [native code] } 错误

通过Google Apps脚本的分页合并从获取的API中获取的对象数组

Google Calendar API使用Apps脚本批量插入事件

如何批量向Google Apps脚本添加数据

使用 Google Apps 脚本的多个批量导入条目

如何通过Google Apps脚本获取Google云端硬盘文件的“共享链接”?

是否可以将格式(阴影)添加到 Google 表格中附加的行(通过 Google Apps 脚本)

如何通过应用脚本从Google表格获取特定范围的行数据

Google Apps脚本-GMail到Google表格-在线程的.csv附件中获取最早的未读电子邮件

Google Apps脚本-如何在onFormSubmit(Google表单事件)中的目标电子表格中获取相应的记录?