Для именованных диапазонов единственным методом конкретного сбора данных является метод 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, вы увидите время выполнения, например:
Я использовал разные диапазоны для каждого вызова, чтобы сервер скриптов приложений не кэшировал ссылку между сравнениями методов.