一次调用能否通过名称获得多个范围?我有一个复杂的函数,需要按名称捕获许多范围,而Spreadsheet.getRangeByName(name)大大降低了我的脚本速度。有时,这些通话大约需要2秒钟,有时单个通话可能需要45秒钟。
限制条件:
我试过的
对于命名范围,唯一的特定获取方法是通过工作簿的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] 删除。
我来说两句